OpenCV-python

0.概述

本文记录opencv常见的几种函数与具体用法。

1.基本操作

Function

Purpose

cv2.imread(image_path, flag)指定路径读取图片
cv2.imshow(window_name, image)窗口内显示图片
cv2.imwrite(filename, image)写入或保存图片
img = cv2.imread(image_path, flag) #读取图片的flags如下

Image Reading Modes

Description

cv2.IMREAD_COLOR读取彩色图片
cv2.IMREAD_GRAYSCALE读取灰白图片
cv2.IMREAD_UNCHANGED读取带 alpha 通道的图片

2.画图

2.1 Images绘图与文本添加

OpenCV 提供以下几种绘图函数与文本添加函数:

Syntax

Purpose

cv2.line(image, start_coordinates, end_coordinates, color_in_bgr, line_thickness)在指定图片上根据起点坐标/终点坐标、线宽绘制线条

cv2.rectangle(image,top_left_vertex_coordinates, lower_right_vertex_coordinates, color_in_bgr, thickness) 

图片上根据线宽和颜色绘制box
cv2.circle(image, center_coordinates, radius, color, thickness)图片上根据圆心坐标、半径、颜色、线宽画圆
cv2.polylines(image, [pts], isClosed, color, thickness)根据顶点坐标绘制多边形

cv2.putText(image, ‘TextContent’, ‘text_starting_point_coordinates’, 

‘fontToBeUsed’, ‘font_size’, ‘text_color’, ‘text_thickness’, ‘line_type’)

图片上添加文本

2.1.1 Draw Line

图片上根据起止点绘制线条。

cv2.line(image, (start_coordinates), (end_coordinates), (color_in_bgr), line_thickness)

2.1.2 Draw Rectangle

图片上绘制矩形box.

cv2.rectangle(image, (‘top_left_vertex_coordinates’),
 (‘lower_right_vertex_coordinates’), 
(‘stroke_color_in_bgr’), ‘stroke_thickness’)

2.1.3 Draw Circle

图片上绘制圆。

cv2.circle(image, (‘center_coordinates’), (‘circle_radius’), 
(‘color_in_bgr’), ‘stroke_thickness’)

2.1.4 Draw Polygon

t图片上绘制多边形或多段线,pts为顶点坐标。

cv2.polylines(image, [pts], isClosed, color, thickness) 

2.1.5 Writing Text

图片上指定区域添加文本内容。

cv2.putText(image, ‘TextContent’, (‘text_starting_point_coordinates’), 
‘fontToBeUsed’, ‘font_size’, (‘text_color’, ‘text_thickness’, ‘line_type’)

2.1.6 Showing Images

在一个窗口中显示图片。

cv2.imshow(window_name, image)

2.1.7 Saving an Image

The cv2.imwrite() method is used to save an image to any storage device. This will save the image according to the specified format in the current working directory.

cv2.imwrite(filename, image) 

2.1.8 Image Cropping

Cropping is the removal of unwanted outer areas from an image.

cropped_img = img[100:300, 100:300]

3.图片操作处理

3.1 图片算术运算

针对图片add,subtract,bitwise(AND, OR, NOT, XOR) 的数学运算操作如下

FunctionUses
cv2.add(image1, image2)两张images相加
cv2.subtract(image1, image2)两张images相减
cv2.addWeighted(image1, weight1, image2, weight2, gammaValue) Alpha 混合加权运算作用在两张图片
cv2.bitwise_and(image1, image2, destination, mask)两张图片按位逻辑与运算,mask为掩膜
cv2.bitwise_or(image1, image2, destination, mask)两张图片按位逻辑或运算,mask为掩膜
cv2.bitwise_not(image, destination, mask)两张图片按位逻辑非运算,mask为掩膜
cv2.bitwise_xor(image1, image2, destination, mask)两张图片按位逻辑异或运算,mask为掩膜

3.2 Images形态学操作

Python OpenCV形态学操作是基于形状处理图像的图像处理技术之一。这种处理策略通常在二值图像上进行。

Operation

Purpose

cv2.erode(image, kernel, iterations=1)腐蚀操作主要涉及腐蚀图像的外表面(前景)。由于二值图像仅包含两个像素0和255,因此主要涉及腐蚀图像的前景,建议前景设置为白色。
cv2.dilate(image, kernel, iterations=1)膨胀操作包括扩张图像的外表面(前景)。由于二值图像仅包含两个像素0和255,因此主要涉及膨胀图像的前景,建议将前景设置为白色。
cv2.morphologyEx(image, Morphology_method, kernel, iterations=1)

以下为常见的形态学操作方法

  • cv2.MORPH_GRADIENT
  • cv2.MORPH_CLOSE
  • cv2.MORPH_OPEN
  • cv2.MORPH_TOPHAT
  • cv2.MORPH_BLACKHAT

3.3 Image 几何变换

图像转换涉及图像的转换操作,如缩放、旋转、裁剪等,以供进一步使用。

Function

Purpose

cv2.resize(image, width, height, interpolation_method)

通过使用这种方法,我们可以根据特定的宽度和高度调整手头的图像大小。
可用于插值的常见方法如下:

  • cv2.INTER_AREA
  • cv2.INTER_CUBIC
  • cv2.INTER_LINEAR

M = cv2.getRotationMatrix2D(center, angle, scale)

cv2.warpAffine(image, M, (width, height))

图像旋转是一种常见的图像处理程序,应用于匹配、对齐和其他基于图像的算法,在图像旋转中,图像会旋转一个确定的角度。我们还可以使用cv2.rotate()函数进行图像旋转。
matrix = cv2.getPerspectiveTransform(src, dst) warpPerspective(image, matrix, dsize)在透视变换中,我们可以更改给定图像或视频的透视图,以便更好地了解所需的信息。需要在图像上提供要通过改变视角来收集信息的点。还需要提供我们想要显示图像的点。

3.4 缩放

图像缩放是一种使用cv2.resize()方法调整数字图像大小的过程。

res = cv2.re­siz­e(i­mg,(2width, 2height), interp­olation)

resize()方法的插值属性有以下类型:(缩放类型)

Scaling Types

Description

cv2.INTER_AREAUsed to shrink the image
cv2.IN­TER­_CUBIC Bicubic interpolation
cv2.INTER_LINEARDefault interpolation technique used to zoom the image

3.5 Image阈值操作

阈值处理是OpenCV中的一种技术,它是根据提供的阈值分配像素值。在阈值处理中,将每个像素值与阈值进行比较。如果像素值小于阈值,则设置为0,否则设置为最大值(通常为255)。

Operation

Purpose

cv2.threshold(source, thresholdValue, maxVal, thresholdingTechnique)对于每个像素,应用相同的阈值。如果像素值小于阈值,则设置为0,否则设置为最大值。这可以通过使用cv2.threshold()方法来实现。
cv2.adaptiveThreshold(source, maxVal, adaptiveMethod, thresholdType, blocksize, constant)自适应阈值是一种为较小区域计算阈值的方法。这导致不同区域在光照变化方面的阈值不同。
cv2.threshold(source, thresholdValue, maxVal, thresholdingTechnique)在Otsu阈值法中,阈值的值不是选择的,而是自动确定的。考虑双峰图像(两个不同的图像值)。生成的直方图包含两个峰值

阈值法包括如下几种:

Thresholding Types

Description

cv2.THRESH_BINARY如果像素强度大于设置的阈值,则该值设置为255,否则设置为0
cv2.THRESH_BINARY_INVcv2.THRESH_BINRY的反转或相反情况
cv2.THRESH_TRUNC如果像素强度值大于阈值,则将其截断为阈值。像素值被设置为与阈值相同
cv2.THRESH_TOZERO对于所有像素值如果小于阈值,像素值设置为0,
cv2.THRESH_TOZERO_INVcv2.THRESH_TOZERO的反转或相反情况

3.6 Edge/Line检测 (Features)

Operation

Uses

cv2.Canny(image, T_lower, T_upper, aperture_size, L2Gradient)Canny边缘检测是一种用于边缘检测的算法。它使用高斯平滑来降低噪声,并使用索sobel滤波器来计算图像梯度。
cv2.HoughLines(edges, 1, np.pi/180, 200)霍夫变换是一种用于图像处理的方法,用于检测任何形状,只要该形状可以用数学形式表示。即使形状有点破碎或变形,它也可以检测到该形状。
cv2.HoughCircles(image, cv2.HOUGH_GRADIENT, 1, 20, param1 = 50, param2 = 30, minRadius = 1, maxRadius = 40)Circle detection圆检测在生物医学应用中有各种用途,从虹膜检测到白细胞分割。​
cv2.cornerHarris(src, dest, blockSize, kSize, freeParameter, borderType)Harris Corner detection算法用于识别图像的内角。图像的角基本上被识别为在所有可能的维度和方向上梯度的大强度存在变化的区域。
cv2.goodFeaturesToTrack(image, max_corner, quantity_level, min_distance) cv2.goodFeaturesToTrack() 用于角点检测
cv2.drawKeypoints(input_image, key_points, output_image, colour, flag)使图像脱颖而出的独特品质被称为图像中的关键点。特定图像的关键点让我们能够识别物体并比较图像。这可以通过使用cv2.drawKeypoints()方法来实现。

3.7 Image 金字塔

Image Pyramids 被用于改变图片的分辨率。

3.7.1 Lower Gaussian Pyramid

pyrDown()函数将图像的大小减小到原始图像的一半。

cv2.pyrDown(layer)

3.7.2 Higher Gaussian Pyramid

pyrDown()函数将图像的大小增大到原始图像的一半。

cv2.pyrUp(layer)

3.8 改变 Images色彩空间

我们可以使用OpenCV更改图像的颜色空间。讨论一下可视化图像的不同方法,将以不同的格式表示图像,如灰度、RGB比例、Hot_map、边缘图、光谱图等。

cv2.cvtColor(image, conversion_scale)

更改图像颜色编码的一些常用方法如下:

  • cv2.COLOR_BGR2GRAY
  • cv2.COLOR_BGR2HSV
  • cv2.COLOR_BGR2LAB
  • cv2.COLOR_BGR2YCrCb

hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) 

lower_blue = np.array([110,50,50]) 

upper_blue = np.array([130,255,255])

cv2.inRange(hsv, lower_blue, upper_blue)

OpenCV提供检测直播视频内容中特定颜色的功能。视频由不同时刻的无限帧组成。

green = np.uint8([[[0, 255, 0]]]) hsv_green = cv2.cvtColor(green, cv2.COLOR_BGR2HSV)OpenCV允许从RGB颜色代码中找出HSV颜色代码。

3.9 Images滤波

当我们在某些点处理图像时,图像会更清晰,我们需要平滑或模糊以获得干净的图像,或者有时图像的边缘会非常糟糕,我们也需要平滑以使图像可用。在OpenCV中,可以有不止一种方法来平滑或模糊图像。

cv2.filter2D(image, ddepth, kernel)使用cv2.filter2D()方法,我们可以使用定制的内核对图像进行平滑处理,以实现不同的图像滤镜,如锐化和模糊等。
cv2.blur(image, shapeOfTheKernel)cv2.blur()方法用于使用归一化框过滤器模糊图像。该函数使用内核平滑图像。
cv2.getGaussianKernel(ksize, sigma[, ktype])cv2.getGaussianKernel()方法用于查找高斯滤波器系数。高斯核也用于高斯模糊。“ktype”是滤波系数的类型。它可以是CV_32F或CV_64F。
cv2.GaussianBlur(image, shapeOfTheKernel, sigmaX )在高斯模糊中,我们将使用加权平均值。在这种类型的内核中,中心像素附近的值将具有更高的权重。sigmaX是高斯核标准偏差,默认设置为0。
cv2.medianBlur(image, kernel size)在cv2.medianBlur()平滑方法中,我们将简单地取内核窗口内所有像素的中值,并用该值替换中心值。
cv2.bilateralFilter(image, diameter, sigmaColor, sigmaSpace)双边模糊方法更关注边缘,并通过保留图像来平滑图像。这是通过执行两个高斯分布来实现的。SigmaColor是给定像素范围内要考虑的颜色数量,不应太高。

3.10 Videos操作处理

OpenCV库可用于对视频执行多种操作。可以执行使用多个图像创建视频、提取图像和帧、绘制形状、在视频上放置文本等操作。以下为其中的一些常见操作。

cv2.VideoCapture(“file_name.mp4”)

要使用OpenCV捕获视频,我们需要创建一个VideoCapture对象。VideoCapture具有设备索引或视频文件的名称。设备索引只是指定哪个摄像头的数字。如果我们通过0,那么它适用于第一台相机,1适用于第二台相机,以此类推。

cv2.VideoCapture(File_path) 

cv2.read() 

cv2.imwrite(filename, img[, params])

使用OpenCV,可以很容易地完成图像扫描和人脸识别等技术。也可以使用OpenCV模块和os模块从视频中提取图像。

4.参考资料

OpenCV Python Cheat Sheet for Beginners 2024

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV-PythonOpenCVPython绑定库,它提供了丰富的计算机视觉功能和图像处理算法。它可以用于图像处理、对象检测、特征提取和跟踪、图像分割等任务。为了安装OpenCV-Python,您可以使用pip命令。如果只需要主要模块,可以运行"pip install opencv-python",如果还需要额外的贡献模块,可以运行"pip install opencv-contrib-python"。根据不同的需求,您可以选择安装不同的版本。目前有OpenCV2和OpenCV3两个大版本,OpenCV3提供了更多功能和方便的特性,但是考虑到与深度学习框架的兼容性和安装的难度,我们推荐先使用OpenCV2进行学习和应用。为了更方便地安装OpenCV-Python,您可以使用以下命令:"pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple"。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [OpenCV-python安装教程](https://blog.csdn.net/qq_41627235/article/details/87692748)[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* [【基础知识】4、python-opencv 超详细介绍](https://blog.csdn.net/jiaoyangwm/article/details/79961778)[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
发出的红包

打赏作者

scott198512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值