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) 的数学运算操作如下
Function | Uses |
---|---|
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) | 以下为常见的形态学操作方法
|
3.3 Image 几何变换
图像转换涉及图像的转换操作,如缩放、旋转、裁剪等,以供进一步使用。
Function | Purpose |
---|---|
cv2.resize(image, width, height, interpolation_method) | 通过使用这种方法,我们可以根据特定的宽度和高度调整手头的图像大小。
|
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.resize(img,(2width, 2height), interpolation)
resize()方法的插值属性有以下类型:(缩放类型)
Scaling Types | Description |
---|---|
cv2.INTER_AREA | Used to shrink the image |
cv2.INTER_CUBIC | Bicubic interpolation |
cv2.INTER_LINEAR | Default 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_INV | cv2.THRESH_BINRY的反转或相反情况 |
cv2.THRESH_TRUNC | 如果像素强度值大于阈值,则将其截断为阈值。像素值被设置为与阈值相同 |
cv2.THRESH_TOZERO | 对于所有像素值如果小于阈值,像素值设置为0, |
cv2.THRESH_TOZERO_INV | cv2.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) | 更改图像颜色编码的一些常用方法如下:
|
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模块从视频中提取图像。 |