初识OpenCV

最近正在学习慕课网上的OpenCV课程(所用开发语言为Python),现总结如下以便后续查看。

一、图像&视频的加载与展示

1、通过OpenCV创建显示窗口、加载图片、保存图片

# 引入OpenCV包
import cv2

# namedWindow:创建窗口
# 'img':窗口名称
# cv2.WINDOW_NORMAL:窗口大小可以调整
cv2.namedWindow('img', cv2.WINDOW_NORMAL)

# resizeWindow:设置窗口大小
# 'img':窗口名称
# 320:窗口宽度
# 240:窗口高度
cv2.resizeWindow('img', 320, 240)

# imread(path,flag):读取图片
# path:访问图片的路径,Windows下为"D:\\uuu\\xxx.jpeg"
# flag:此处采用默认参数
# 返回值:Mat类型
img = cv2.imread("C:\\Users\\Administrator\\Pictures\\Camera Roll\\perspective.jpeg")

# 循环展示图片,按q键退出
while True:
    # imshow:显示窗口
    # 'img':窗口名称
    # img:imread读取到的图片数据    
    cv2.imshow('img', img)
    
    # waitKey:等待窗口的显示时长,用于接收鼠标和键盘的事件    
    # 0:窗口一直显示    
    key = cv2.waitKey(0)
    
    # ord:获取ASCII码    
    # key:int型,16位,ASCII码是8位    
    # key & 0xFF:取key的后8位    
    if(key & 0xFF == ord('q')):        
    	break    
    	
    elif(key & 0xFF == ord('s')):
        # imwrite(name,img):保存图片        
        # name:要保存的文件名        
        # img:Mat类型        
        cv2.imwrite("C:\\Users\\Administrator\\Pictures\\Camera Roll\\123.png", img)    
        
#释放窗口占用资源
cv2.destroyAllWindows()
### OpenCV 中轮廓近似与模板匹配入门 #### 轮廓近似的概念和实现 在计算机视觉领域,轮廓近似是一种简化多边形曲线的方法。通过减少不必要的点来表示物体边界,从而降低计算复杂度并提高处理速度。 对于给定的一组轮廓点,`approxPolyDP()` 函数用于查找具有最少可能顶点数量的多边形,这些顶点能够紧密拟合原始形状。该过程依赖于 Douglas-Peucker 算法,它允许指定最大距离误差 `epsilon` 来控制近似程度: ```python import cv2 import numpy as np def approximate_contour(contours, epsilon_ratio=0.01): approximations = [] for contour in contours: perimeter = cv2.arcLength(contour, True) approximation = cv2.approxPolyDP( curve=contour, epsilon=epsilon_ratio * perimeter, closed=True ) approximations.append(approximation) return approximations ``` 此代码片段展示了如何利用弧长作为尺度因子调整 `epsilon` 参数[^1]。 #### 模板匹配的概念和技术细节 模板匹配技术旨在在一个较大图像内寻找特定子图案的最佳位置。OpenCV 提供了多种相似性测度选项,包括平方差 (`TM_SQDIFF`) 和标准化互相关 (`TM_CCOEFF_NORMED`) 方法等。 当执行模板匹配时,通常会先对源图像以及目标模式应用相同的预处理步骤(如灰度转换、阈值设定)。接着调用 `matchTemplate()` 执行卷积运算,并依据所选评估标准获取响应矩阵。最后定位峰值坐标即代表最佳匹配区域中心点的位置。 以下是 Python 实现示例: ```python template_image = cv2.imread('template.png', 0) # 加载模板图片为灰度图 main_image = cv2.imread('scene.jpg' , 0) # 加载场景图片也为灰度图 result = cv2.matchTemplate(main_image, template_image, cv2.TM_CCORR_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) top_left_corner = max_loc bottom_right_corner = (top_left_corner[0]+w, top_left_corner[1]+h) cv2.rectangle(main_image,top_left,bottom_right,(0,0,255),2) ``` 上述脚本说明了怎样读取两张不同尺寸但内容相关的单通道图像文件,并运用归一化的交叉关联算法完成精确搜索任务[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值