OpenCV常用的函数和操作

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

 一、图像读取和显示:

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

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

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

cv2.imshow('image', img)

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

import cv2

# 读取图像
image = cv2.imread('input.jpg')

# 处理图像(这里假设对图像进行了处理)

# 保存图像到文件
cv2.imwrite('output.jpg', image)

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

import cv2

# 打开两个窗口并显示图像
cv2.imshow('Window1', image1)
cv2.imshow('Window2', image2)

# 关闭特定窗口
cv2.destroyWindow('Window1')

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

import cv2

# 打开一个窗口并显示图像
cv2.imshow('Window', image)

# 在某个条件下关闭所有窗口
if condition:
    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的反转

import cv2
import matplotlib.pyplot as plt
img=cv2.imread('cat.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)

titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([])
plt.show()

 三、图像平滑:

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

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

# 均值滤波
# 简单的平均卷积操作
blur = cv2.blur(img, (3, 3))

cv2.imshow('blur', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

# 方框滤波
# 基本和均值一样,可以选择归一化
box = cv2.boxFilter(img,-1,(3,3), normalize=True)  

cv2.imshow('box', box)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

cv2.imshow('aussian', aussian)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

# 相当于用中值代替
median = cv2.medianBlur(img, 5)  # 中值滤波

cv2.imshow('median', median)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、 颜色空间转换:

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

import cv2

# 读取图像
image = cv2.imread('input.jpg')

# 将图像从BGR颜色空间转换为灰度颜色空间
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 将图像从BGR颜色空间转换为HSV颜色空间
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

五、 图像处理:

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

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

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

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

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

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

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

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

import cv2

# 读取图像
image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)  # 将图像以灰度方式读取

# 使用Canny边缘检测算法
edges = cv2.Canny(image, threshold1, threshold2)

# 第一个参数是输入图像,通常是灰度图像。
# 第二个参数threshold1是低阈值maxVal,用于边缘强度的下限。
# 第三个参数threshold2是高阈值minVal,用于边缘强度的上限

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

import cv2

# 读取灰度图像
image = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)

# 设定阈值,将图像分为前景和背景
threshold_value = 128  # 阈值
retval, thresholded_image = cv2.threshold(image, threshold_value, max_value, threshold_type)

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

五、形态学操作:

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

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

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

kernel = np.ones((3,3),np.uint8) 
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)

cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

# 开:先腐蚀,再膨胀
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)

cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 闭:先膨胀,再腐蚀
img = cv2.imread('dige.png')

kernel = np.ones((5,5),np.uint8) 
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

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

六、 轮廓检测: 

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

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

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

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

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

七、绘图函数:

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

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

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

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

八、计算机视觉:

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

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

九、视频处理:

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

vc = cv2.VideoCapture('test.mp4')
if vc.isOpened():
    open, frame = vc.read()
else:
    open = False
while open:
    ret, frame = vc.read()
    if frame is None:
        break
    if ret == True:
        gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        cv2.imshow('result',gray)
        if cv2.waitKey(10) & 0XFF == 27:
            break
vc.release()
cv2.destroyAllWindows()

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

十、特征检测和匹配:

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

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

十一、图像混合和融合:

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

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

import cv2

# 读取两幅图像
image1 = cv2.imread('image1.jpg')
image2 = cv2.imread('image2.jpg')

# 设置权重参数
alpha = 0.5
beta = 0.5
gamma = 0

# 执行加权叠加
result = cv2.addWeighted(image1, alpha, image2, beta, gamma)
# src1:第一幅输入图像。
# alpha:第一幅输入图像的权重,通常是一个浮点数。
# src2:第二幅输入图像。
# beta:第二幅输入图像的权重,通常是一个浮点数。
# gamma:加到结果图像上的标量值。通常用于调整图像的亮度。
# dst:输出图像,与输入图像具有相同的大小和深度。
# dtype(可选):输出图像的数据类型,通常使用默认值 cv2.CV_64F 或 -1

# 显示结果图像
cv2.imshow('Blended Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
opencv-python常用操作包括图像的读取、显示、保存,以及图像的基本处理操作,如灰度转换、裁剪、缩放、旋转等。 下面是一些常用opencv-python操作: 1. 图像读取:使用cv2.imread()函数读取图像文件,指定文件路径和读取模式。例如:image = cv2.imread('image.jpg')。 2. 图像显示:使用cv2.imshow()函数显示图像,参数为窗口名称和图像数据。例如:cv2.imshow('image', image)。 3. 图像保存:使用cv2.imwrite()函数将图像保存到文件中,参数为保存路径和图像数据。例如:cv2.imwrite('output.jpg', image)。 4. 灰度转换:使用cv2.cvtColor()函数将彩色图像转换为灰度图像,参数为原始图像和转换模式。例如:gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)。 5. 裁剪图像:使用数组切片操作来裁剪图像的特定区域。例如:cropped_image = image[y:y+h, x:x+w]。 6. 缩放图像:使用cv2.resize()函数调整图像大小,参数为原始图像和目标大小。例如:resized_image = cv2.resize(image, (new_width, new_height))。 7. 旋转图像:使用cv2.getRotationMatrix2D()和cv2.warpAffine()函数来旋转图像,分别生成旋转矩阵和应用矩阵。例如:M = cv2.getRotationMatrix2D(center, angle, scale);rotated_image = cv2.warpAffine(image, M, (width, height))。 以上是一些常见的opencv-python操作,可以根据具体需求进行选择和组合使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [如何解决opencv-python,以及opencv-contrib-python包安装运行解决人脸识别问题等问题](https://blog.csdn.net/Go_ahead_forever/article/details/131529050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [opencv-python常用函数汇总](https://blog.csdn.net/qq_45752541/article/details/125037327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值