OpenCV—python 基于透视的图像矫正
基于透视的图像矫正
- 以灰度图读入
- 腐蚀膨胀,闭合等操作
- 二值化图像
- 获取图像顶点
- 透视矫正
该方法不具有普适性,只针对比较干净对比度高的图像,只提供参考
from imutils.perspective import four_point_transform import imutils import cv2 def Get_Outline(input_dir): image = cv2.imread(input_dir) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blurred = cv2.GaussianBlur(gray, (5,5),0) edged = cv2.Canny(blurred,75,200) return image,gray,edged def Get_cnt(edged): cnts = cv2.findContours(edged.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE) cnts = cnts[0] if imutils.is_cv2() else cnts[1] docCnt =None if len(cnts) > 0: cnts =sorted(cnts,key=cv2.contourArea,reverse=True) for c in cnts: peri = cv2.arcLength(c,True) # 轮廓按大小降序排序 approx = cv2.approxPolyDP(c,0.02 * peri,True) # 获取近似的轮廓 if len(approx) ==4: # 近似轮廓有四个顶点 docCnt = approx break return docCnt if __name__=="__main__": input_dir = "gongjiaoka.png" image,gray,edged = Get_Outline(input_dir) docCnt = Get_cnt(edged) result_img = four_point_transform(image, docCnt.reshape(4,2)) # 对原始图像进行四点透视变换 cv2.imshow("original", image) cv2.imshow("gray", gray) cv2.imshow("edged", edged) cv2.imshow("result_img", result_img) cv2.waitKey(0) cv2.destroyAllWindows()
运行结果
分类:
计算机视觉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人