OpenCV常用的函数和操作_opencv函数 - wpsshop博客
当前位置:   article > 正文

OpenCV常用的函数和操作_opencv函数

opencv函数

OpenCV(Open Source Computer Vision Library)是一个广泛应用于计算机视觉任务的开源计算机视觉库。以下是一些常用的OpenCV函数和操作:

 一、图像读取和显示:

(1)cv2.imread(): 用于读取图像文件

  1. img_cat = cv2.imread('cat.jpg')
  2. img_dog = cv2.imread('dog.jpg')

(2)cv2.imshow(): 用于显示图像。

cv2.imshow('image', img)

(3) cv2.imwrite():用于保存图像到文件。

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('input.jpg')
  4. # 处理图像(这里假设对图像进行了处理)
  5. # 保存图像到文件
  6. cv2.imwrite('output.jpg', image)

(4) cv2.destroyWindow():用于关闭指定名称的窗口的函数。

  1. import cv2
  2. # 打开两个窗口并显示图像
  3. cv2.imshow('Window1', image1)
  4. cv2.imshow('Window2', image2)
  5. # 关闭特定窗口
  6. cv2.destroyWindow('Window1')

(5) cv2.destroyAllWindows():用于关闭所有通过OpenCV打开的窗口的函数。

  1. import cv2
  2. # 打开一个窗口并显示图像
  3. cv2.imshow('Window', image)
  4. # 在某个条件下关闭所有窗口
  5. if condition:
  6. cv2.destroyAllWindows()

二、 图像阈值:

(1)ret, dst = cv2.threshold(src, thresh, maxval, type)

         src: 输入图,只能输入单通道图像,通常来说为灰度图

        dst: 输出图

        thresh: 阈值

        maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

        type:二值化操作的类型,包含以下5种类型:

                (1)cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0

                (2)cv2.THRESH_BINARY_INV THRESH_BINARY的反转

                (3)cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变

                (4)cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0

                (5)cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转

  1. import cv2
  2. import matplotlib.pyplot as plt
  3. img=cv2.imread('cat.jpg')
  4. img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
  5. ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
  6. ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
  7. ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
  8. ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
  9. ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)
  10. titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
  11. images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
  12. for i in range(6):
  13. plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
  14. plt.title(titles[i])
  15. plt.xticks([]), plt.yticks([])
  16. plt.show()

 三、图像平滑:

  图像平滑是一种图像处理技术,用于减少图像中的噪声、去除细节,使图像更加模糊或柔和。这种技术对于许多视觉计算机和图像处理任务非常有用,例如消除图像中的噪声、模糊边缘、改善图像质量等。 

(1)均值滤波 cv2.blur() 

  1. # 均值滤波
  2. # 简单的平均卷积操作
  3. blur = cv2.blur(img, (3, 3))
  4. cv2.imshow('blur', blur)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()

(2) 方框滤波 cv2.boxFilter()

  1. # 方框滤波
  2. # 基本和均值一样,可以选择归一化
  3. box = cv2.boxFilter(img,-1,(3,3), normalize=True)
  4. cv2.imshow('box', box)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()

(3) 高斯滤波 cv2.GaussianBlur()

  1. # 高斯滤波
  2. # 高斯模糊的卷积核里的数值是满足高斯分布,相当于更重视中间的
  3. aussian = cv2.GaussianBlur(img, (5, 5), 1)
  4. cv2.imshow('aussian', aussian)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()

(4) 中值滤波 cv2.medianBlur()

  1. # 相当于用中值代替
  2. median = cv2.medianBlur(img, 5) # 中值滤波
  3. cv2.imshow('median', median)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

四、 颜色空间转换:

 (1)cv2.cvtColor():用于图像颜色空间的转换,如从BGR到灰度或从BGR到HSV。

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('input.jpg')
  4. # 将图像从BGR颜色空间转换为灰度颜色空间
  5. gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  6. # 将图像从BGR颜色空间转换为HSV颜色空间
  7. hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

五、 图像处理:

(1)cv2.resize():用于调整图像大小。

  1. img_cat = cv2.resize(img_cat, (499,429))
  2. print(img_cat.shape)

(2)cv2.Canny(): 用于边缘检测

        1) 使用高斯滤波器,以平滑图像,滤除噪声。

        2) 计算图像中每个像素点的梯度强度和方向。

        3) 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。

        4) 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

        5) 通过抑制孤立的弱边缘最终完成边缘检测。

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE) # 将图像以灰度方式读取
  4. # 使用Canny边缘检测算法
  5. edges = cv2.Canny(image, threshold1, threshold2)
  6. # 第一个参数是输入图像,通常是灰度图像。
  7. # 第二个参数threshold1是低阈值maxVal,用于边缘强度的下限。
  8. # 第三个参数threshold2是高阈值minVal,用于边缘强度的上限

(3)cv2.threshold():用于图像二值化。

  1. import cv2
  2. # 读取灰度图像
  3. image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
  4. # 设定阈值,将图像分为前景和背景
  5. threshold_value = 128 # 阈值
  6. retval, thresholded_image = cv2.threshold(image, threshold_value, max_value, threshold_type)

(4)cv2.warpAffine():用于图像的仿射变换。

五、形态学操作:

(1)cv2.erode():用于腐蚀图像。

  1. import cv2
  2. img = cv2.imread('dige.png')
  3. kernel = np.ones((3,3),np.uint8)
  4. erosion = cv2.erode(img,kernel,iterations = 1)
  5. cv2.imshow('erosion', erosion)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()

 (2)cv2.dilate():用于膨胀图像。

  1. kernel = np.ones((3,3),np.uint8)
  2. dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
  3. cv2.imshow('dilate', dige_dilate)
  4. cv2.waitKey(0)
  5. cv2.destroyAllWindows()

 (3)cv2.morphologyEx():用于更复杂的形态学操作,如开运算和闭运算,礼帽和黑帽,梯度运算。

  1. # 开:先腐蚀,再膨胀
  2. img = cv2.imread('dige.png')
  3. kernel = np.ones((5,5),np.uint8)
  4. opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
  5. cv2.imshow('opening', opening)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 闭:先膨胀,再腐蚀
  2. img = cv2.imread('dige.png')
  3. kernel = np.ones((5,5),np.uint8)
  4. closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
  5. cv2.imshow('closing', closing)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 梯度运算(梯度=膨胀-腐蚀)
  2. pie = cv2.imread('pie.png')
  3. kernel = np.ones((7,7),np.uint8)
  4. gradient = cv2.morphologyEx(pie, cv2.MORPH_GRADIENT, kernel)
  5. cv2.imshow('gradient', gradient)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 礼帽 = 原始输入-开运算结果
  2. #礼帽
  3. img = cv2.imread('dige.png')
  4. tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
  5. cv2.imshow('tophat', tophat)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
  1. # 黑帽 = 闭运算-原始输入
  2. #黑帽
  3. img = cv2.imread('dige.png')
  4. blackhat = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
  5. cv2.imshow('blackhat ', blackhat )
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()

六、 轮廓检测: 

(1) cv2.findContours():用于检测图像中的轮廓。

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('input.jpg')
  4. # 将图像转换为灰度
  5. gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  6. # 查找图像中的轮廓
  7. contours, hierarchy = cv2.findContours(gray_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  8. # cv2.findContours()函数参数包括:
  9. # 第一个参数是输入图像,通常是灰度图像。
  10. # 第二个参数是检索模式,它定义了如何检索。常见的选项包括:
  11. # (1)cv2.RETR_EXTERNAL:仅检测外部。
  12. # (2)cv2.RETR_LIST:检测所有单一,不建立层次关系。
  13. # (3)cv2.RETR_CCOMP:检测所有的,建立两层的层次关系。
  14. # (4)cv2.RETR_TREE:检测所有的,建立完整的层次关系树。
  15. # 第三个参数是虚构的近方法,它定义了如何表示虚构的点。常见的选项包括:
  16. # (1)cv2.CHAIN_APPROX_SIMPLE:压缩水平、垂直和对角线段,仅保留它们的端点。
  17. # (2)cv2.CHAIN_APPROX_NONE:保留所有单一点。
  18. # 函数的返回值包括两个:
  19. # (1)contours是一个包含检测到的自定义的列表,每个都是一个点坐标的列表。
  20. # (2)hierarchy是一个层次的信息,它表示之间的关系。

(2)  cv2.drawContours(): 绘制轮廓

   图像代码首先使用cv2.imread()读取一个图像文件(例如,'input.jpg'),然后将图像转换为灰度图像,因为通常是在灰度图像上进行检测。接下来,使用函数查找图像中的转换cv2.findContours()。最后,cv2.drawContours()在原始图像上使用函数来计算这些相似值。

  1. import cv2
  2. # 读取图像
  3. image = cv2.imread('input.jpg')
  4. # 将图像转换为灰度
  5. gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
  6. # 查找图像中的轮廓
  7. contours, _ = cv2.findContours(gray_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
  8. # 在图像上绘制轮廓
  9. cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
  10. # cv2.drawContours()函数参数包括:
  11. #
  12. # 第一个参数是目标图像,这里是原始图像。
  13. # 第二个参数是列表,它包含了要不同的单独。
  14. # 第三个参数是抽象的索引,如果设置为-1,则将不同的所有检测到抽象的。
  15. # 第四个参数是自定义的颜色。
  16. # 第五个参数是相似的线宽。

七、绘图函数:

(1)cv2.line():绘制直线。

(2)cv2.rectangle():绘制矩形。

(3)cv2.circle():绘制圆。

(4)cv2.putText():在图像上绘制文本。

八、计算机视觉:

(1)cv2.CascadeClassifier():用于对象检测,如人脸检测。

(2)cv2.calcHist():用于图像直方图的计算。

九、视频处理:

(1)cv2.VideoCapture():用于捕获视频。

  1. vc = cv2.VideoCapture('test.mp4')
  2. if vc.isOpened():
  3. open, frame = vc.read()
  4. else:
  5. open = False
  6. while open:
  7. ret, frame = vc.read()
  8. if frame is None:
  9. break
  10. if ret == True:
  11. gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  12. cv2.imshow('result',gray)
  13. if cv2.waitKey(10) & 0XFF == 27:
  14. break
  15. vc.release()
  16. cv2.destroyAllWindows()

(2) cv2.VideoWriter():用于保存视频。

十、特征检测和匹配:

(1)cv2.SIFT():用于检测关键点和计算SIFT特征。

(2)cv2.matchTemplate():用于模板匹配。

十一、图像混合和融合:

(1)cv2.add():用于图像加法。

(2)cv2.addWeighted():用于图像权重相加。

  1. import cv2
  2. # 读取两幅图像
  3. image1 = cv2.imread('image1.jpg')
  4. image2 = cv2.imread('image2.jpg')
  5. # 设置权重参数
  6. alpha = 0.5
  7. beta = 0.5
  8. gamma = 0
  9. # 执行加权叠加
  10. result = cv2.addWeighted(image1, alpha, image2, beta, gamma)
  11. # src1:第一幅输入图像。
  12. # alpha:第一幅输入图像的权重,通常是一个浮点数。
  13. # src2:第二幅输入图像。
  14. # beta:第二幅输入图像的权重,通常是一个浮点数。
  15. # gamma:加到结果图像上的标量值。通常用于调整图像的亮度。
  16. # dst:输出图像,与输入图像具有相同的大小和深度。
  17. # dtype(可选):输出图像的数据类型,通常使用默认值 cv2.CV_64F 或 -1
  18. # 显示结果图像
  19. cv2.imshow('Blended Image', result)
  20. cv2.waitKey(0)
  21. cv2.destroyAllWindows()

 这些只是OpenCV库中的一些常见函数和操作。OpenCV提供了大量的功能,适用于各种计算机视觉和图像处理任务。你可以根据具体的需求查阅OpenCV的文档并使用适当的函数来完成你的项目。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/737142
推荐阅读
相关标签