# 图像校正示例
import cv2
import numpy as npim = cv2.imread("../dataset/data/paper.jpg")
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow('im', im)# 模糊第三个0  ,拿去翻译Gaussian kernel standard deviation in X direction.
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
# 膨胀
dilate = cv2.dilate(blurred,                cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))) # 根据函数返回kernel
# 检测边沿
edged = cv2.Canny(dilate,  # 原始图像30, 120,  # 滞后阈值、模糊度3)  # 孔径大小
# cv2.imshow("edged", edged)# 轮廓检测
# 进行轮廓处理的时候,我们要给的图像是灰度二值化
cnts = cv2.findContours(edged.copy(),cv2.RETR_EXTERNAL,  # 只检测外轮廓cv2.CHAIN_APPROX_SIMPLE)  # 只保留该方向的终点坐标
docCnt = None# 绘制轮廓
im_cnt = cv2.drawContours(im,  # 绘制图像cnts,  # 轮廓点列表-1,  # 绘制全部轮廓(0, 0, 255),  # 轮廓颜色:红色2)  # 轮廓粗细
cv2.imshow("im_cnt", im_cnt)# 计算轮廓面积,并排序
if len(cnts) > 0:cnts = sorted(cnts,  # 数据key=cv2.contourArea,  # 排序依据,根据contourArea函数结果排序,根据轮廓的面积进行排序reverse=True)#倒叙排列for c in cnts:peri = cv2.arcLength(c, True)  # 计算轮廓周长,计算封闭轮廓的周长approx = cv2.approxPolyDP(c, 0.02 * peri, True)  # 轮廓多边形拟合# 轮廓为4个点表示找到纸张if len(approx) == 4:docCnt = approxbreakprint(docCnt)# 用圆圈标记处角点
points = []
for peak in docCnt:peak = peak[0]# 绘制圆cv2.circle(im,  # 绘制图像tuple(peak), 10,  # 圆心、半径(0, 0, 255), 2)  # 颜色、粗细points.append(peak)  # 添加到列表
print(points)#坐标分别是左上,左下,右下,右上
cv2.imshow("im_point", im)# 校正
src = np.float32([points[0], points[1], points[2], points[3]])  # 原来逆时针方向四个点
dst = np.float32([[0, 0], [0, 488], [337, 488], [337, 0]])  # 对应变换后逆时针方向四个点
m = cv2.getPerspectiveTransform(src, dst)  # 生成透视变换矩阵
result = cv2.warpPerspective(gray.copy(), m, (337, 488))  # 透视变换
cv2.imshow("result", result)  # 显示透视变换结果#下面的是使用勾股定理进行图像矫正,以这个为重点,上面的数据是定死的
# h = int(math.sqrt((points[1][0]-points[0][0])**2+(points[1][1]-points[0][1])**2))
# w = int(math.sqrt((points[2][0]-points[1][0])**2+(points[2][1]-points[1][1])**2))
# w = int(math.sqrt((points[3][1] - points[0][1]) ** 2 + (points[3][0] - points[0][0]) ** 2))
# print("w:",w,"h:",h)#h和w我们可以自己找,并不是说局限于上面我找的
# dst = np.float32([[0,0],[0,h],[w,h],[w,0]])
# 生成透视变换矩阵
# m = cv2.getPerspectiveTransform(src,dst)
# 执行透视变换,返回变换后的图像
# result = cv2.warpPerspective(gray.copy(),m,(w,h))
# cv2.imshow("result",result)cv2.waitKey()
cv2.destroyAllWindows()


函数cv2.approxPolyDP()用来构造指定精度的逼近多边形曲线。该函数的语法格式为:
approxCurve = cv2.approxPolyDP(curve,epsilon,closed)
“”"
参数:
curve: 轮廓
epsilon: 精度,原始轮廓的边界点与逼近多边形边界之间的最大距离
closed: 布尔类型,该值为True时,逼近多边形是封闭的;否则,逼近多边形是不封闭的
返回值:
approxCurve: 逼近多边形的点集
“”"

利用OpenCV实现图像矫正相关推荐

  1. 利用opencv结合mfc实现识别圆形标记点并计算多个圆形标记点的三维坐标,拟合平面并计算法向量

    利用opencv结合mfc实现识别圆形标记点并计算多个圆形标记点的三维坐标,拟合平面并计算法向量 具体步骤 二.对应代码 1.引入库 2.标定 识别圆形标记点 左右图像中圆形标记点匹配 计算三维坐标 ...

  2. python如何实现找图_利用OpenCV和Python实现查找图片差异

    使用OpenCV和Python查找图片差异 flyfish 方法1 均方误差的算法(Mean Squared Error , MSE) 下面的一些表达与<TensorFlow - 协方差矩阵&g ...

  3. 利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)

    作者 | Jose Garcia 译者 | 吴振东 校对 | 张一豪.林亦霖,编辑 | 于腾凯 来源 | 数据派(ID:datapi) 导读:本文将利用OpenCV,Python和Ubidots来编写 ...

  4. 利用OpenCV识别玻璃纤维织物劈缝缺陷

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 玻璃纤维织物是经编多轴向织物,由一层或多层平行的纱线按照尽可能多的 ...

  5. opencv resize_利用OpenCV 识别两张相似的图片

    Background: 在我们项目中,用到U-net,我们对训练样本图片使用labelme进行标定,对标定生成的json文件labelme_json_to_dataset生成标注图像,由于小伙伴将生成 ...

  6. 独家|OpenCV1.9 如何利用OpenCV的parallel_for_并行化代码(附代码)

    翻译:陈之炎 校对:顾伟嵩本文约3200字,建议阅读7分钟本教程的目标是展示如何使用OpenCV的parallel_for_框架轻松实现代码并行化. 目标 本教程的目标是展示如何使用OpenCV的pa ...

  7. opencv 取roi_利用OpenCV 识别两张相似的图片

    Background: 在我们项目中,用到U-net,我们对训练样本图片使用labelme进行标定,对标定生成的json文件labelme_json_to_dataset生成标注图像,由于小伙伴将生成 ...

  8. 如何利用OpenCV寻找轮廓的中心?

    简 介: 本文介绍了利用OpenCV和Python编程来计算形状轮廓的中心点.当然后面还会继续给出如何通过轮廓来分辨物体形状种类,以及对于各自的颜色进行标准. 关键词: OpenCV,contours ...

  9. 利用OpenCV读取和写入视频

    简 介: 本文介绍了如何对三种不同的视频源(视频文件, 序列图片以及网络摄像头)来进行读取显示视频,使用视频捕获对象. 也给出了如何通过视频捕获对象获取视频流的重要元数据. 介绍了使用视频写入对象把视 ...

最新文章

  1. 建立FPGA深度学习加速生态圈,为人工智能赋能
  2. 简化存货核算方法和物料分类帐对比
  3. FindFirstVolume系列函数遍历驱动器,获取驱动器信息
  4. FreeModbus线圈
  5. 【ASP.NET Web API教程】2 创建各种Web API
  6. 下载文件扩展名php,[宜配屋]听图阁
  7. 命令行方式使用FTP
  8. python中的__all__
  9. 转:孩子,上学去!乖
  10. BIM族库下载——Revit配景族
  11. linux+时间戳+ns,时间戳转换工具
  12. 绕过卡巴斯基dump进程lsass.exe内存
  13. 网络资源大搜索(转)
  14. 2.jQuery常见API
  15. kubernetes Auditing 实战
  16. g 最新编译器linux,Linux下安装gcc 、g++ 、gfortran编译器
  17. iOS开发 --- AlipaySDK接入(version:15.6.4 motify:2019.06.11)
  18. linux基础知识大纲
  19. 标准logo大小尺寸设置标准是什么? logo大小参数详解。
  20. 软考网络工程师难考吗?

热门文章

  1. 微信又因夜间模式上热搜,我们又成为了谣言的传播者
  2. Zabbix 地址Ping检测告警
  3. 真Unity3d_梦幻西游无双的引擎是?
  4. 微信小程序:连续签到7天签到积分获得功能设计
  5. 服务器 战地4 无限载入,战地4卡在loading界面无限载入_战地4无限载入解决方法...
  6. 技术接受模型(TAM,Technology Acceptance Model)
  7. 汉字编码问题(附编码察看器)
  8. CentOS,Ubuntu,Linux下安装yasm-1.3.0详细说明
  9. trt-tl10ac01b220_android 7.0_emui 5.1,华为畅享7 plus固件TRT-TL10C01B201_Android 7.0_EMUI 5.1强刷救砖包...
  10. 解决 java double 减 int 型 产生的精度问题