前言
日常生活中,手残党们经常会把一些照片拍歪,比如拍个证件、试卷、PPT什么的,
比如下面这本书的封面原本是个矩形,随手一拍就成了不规则四边形
想要把它变成规则的矩形,有什么办法呢?
你一定想到了 PS,因为网上很多教程就是这么教的
下面我们来写个程序,自动将图片恢复到任意矩形!
程序实现
1. 打开图片并显示
import cv2 as cv import numpy as np path = './book.jpg' src = cv.imread(path) def get_window_size(src, bound=600): h,w = src.shape[0], src.shape[1] if h > w: h, w = bound, int(w*bound/h) else: h, w = int(h*bound/w), bound return (h, w) h, w = get_window_size(src) win_name = 'RecAdjust' cv.namedWindow(win_name, cv.WINDOW_NORMAL) cv.resizeWindow(win_name, width=w, height=h) cv.imshow(win_name, src) cv.waitKey(0) cv.destroyAllWindows()
2. 在图片中标记四个角点
src_copy = src.copy() class Indexer: def __init__(self, bound=4): self.id = 0 self.bound=bound def get_id(self): self.id = (self.id+1)%self.bound return (self.id-1)%self.bound+1 def on_EVENT_LBUTTONDOWN(event, x, y, flags, param): if event == cv.EVENT_LBUTTONDOWN: img = param['src'] win_name = param['window'] indexer = param['indexer'] points = param['points'] curr_id = indexer.get_id() points.append((x,y)) print('第{}个顶点: ({},{})'.format(curr_id, x, y)) cv.circle(img, (x, y), 10, (0, 0, 255), thickness = 2) cv.putText( img, str(curr_id), # 文字 (x, y), # 坐标 cv.FONT_HERSHEY_PLAIN, 5, # 字号 (0,0,255), # 字体颜色 thickness = 2 # 粗细 ) cv.imshow(win_name, img) points = [] indexer = Indexer() win_name = 'RecAdjust' cv.namedWindow(win_name, cv.WINDOW_NORMAL) cv.resizeWindow(win_name, width=w, height=h) cv.imshow(win_name, src) cv.setMouseCallback(win_name, on_EVENT_LBUTTONDOWN, param={'src':src,'window':win_name, 'indexer':indexer, 'points':points}) cv.waitKey(0) cv.destroyAllWindows() print(points)
3. 设定输出矩形大小
# W = int(input('输出图片宽度:')) # H = int(input('输出图片高度:')) W,H = 600, 800 target_points = [(0,0),(W,0),(W,H),(0,H)]
4. 求解透视变换矩阵
points, target_points = np.array(points, dtype=np.float32), np.array(target_points, dtype=np.float32) M = cv.getPerspectiveTransform(points, target_points) print('透视变换矩阵:',M)
5. 透视变换并保存图片
result = cv.warpPerspective(src_copy, M, (0, 0)) result = result[:H, :W] win_name = 'Result' cv.namedWindow(win_name, cv.WINDOW_NORMAL) cv.resizeWindow(win_name, width=W, height=H) cv.imshow(win_name, result) cv.waitKey(0) cv.destroyAllWindows() output_file = 'result.jpg' cv.imwrite(output_file, result)
结果如下
结果没有想象的完美,是因为书的封面已经不是一个平面了,书角翘起。。。
如果图片中的矩形在一个平面上的话,效果还是挺不错的!!
完整代码下载
可关注后免费下载喔:https://download.csdn.net/download/itnerd/12819535(本地下载)
总结
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“利用Python将图片中扭曲矩形的复原”评论...
更新日志
2024年11月08日
2024年11月08日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]