投资理财网站模板,南京市环保局官方南京做网站,王野甲壳虫,科技感背景素材OpenCV基本操作#xff08;python开发#xff09;——#xff08;1#xff09; 读取图像、保存图像 OpenCV基本操作#xff08;python开发#xff09;——#xff08;2#xff09;图像色彩操作 OpenCV基本操作#xff08;python开发#xff09;——#xff08;3python开发——1 读取图像、保存图像 OpenCV基本操作python开发——2图像色彩操作 OpenCV基本操作python开发——3图像形态操作 OpenCV基本操作python开发——4图像梯度处理 OpenCV基本操作python开发——5轮廓处理 OpenCV基本操作python开发——6)视频基本处理 OpenCV基本操作python开发——7)实现图像校正 OpenCV基本操作python开发——8)实现芯片瑕疵检测
OpenCV——实现图像校正
【任务描述】
我们对图像中的目标进行分析和检测时目标往往具有一定的倾斜角度自然条件下拍摄的图像完全平正是很少的。因此需要将倾斜的目标“扶正”的过程就就叫做图像矫正。该案例中使用的原始图像如下 【代码】
# 图像校正示例
import cv2
import numpy as np
import mathim cv2.imread(../data/paper.jpg)
gray cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.imshow(im, im)# 模糊
blurred cv2.GaussianBlur(gray, (5, 5), 0)
# 膨胀
dilate cv2.dilate(blurred, (3, 3))
# 检测边沿
edged cv2.Canny(dilate, # 原始图像30, 120) # 滞后阈值、模糊度
# cv2.imshow(edged, edged)# 轮廓检测
img, cnts, hie 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, # 数据keycv2.contourArea, # 排序依据根据contourArea函数结果排序reverseTrue)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)) # 透视变换 根据勾股定理计算宽度、高度再做透视变换
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)) # 高度
print(w:, w, h:, h)
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()【执行结果】