OpenCV图像预处理常用函数及流程

OpenCV图像预处理常用函数及流程

1.OpenCV环境配置

在PyCharm终端中,运行如下命令

pip install opencv-python
pip install opencv-contrib-python

由于默认使用的为外网资源,下载速度和稳定性较差,具体看网络状态。如下命令为使用清华镜像下载安装相应的包

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install opencv-contrib-python -i https://pypi.tuna.tsinghua.edu.cn/simple

在终端中运行命令时,Windows10系统可能会存在如下报错:无法加载激活文件,因此在此系统上禁止运行脚本。此情况是因为windows新的权限执行策略的改变,需要在PowerShell中进行权限的更改。可通过开始菜单栏找到Windows PowerShell。注意使用 以管理员身份运行,否则无法更改执行策略。

OpenCV图像预处理常用函数及流程

在PowerShell中执行如下命令:

Get-ExecutionPolicy

如果输出值为

Restricted

则表明目前系统上禁止运行没有数字签名的脚本。需要运行如下命令,将执行策略更改为remotesigned模式

Set-ExecutionPolicy Bypass

之后重启Pycharm,重新执行OpenCV的安装命令即可。

2.图像预处理流程及对应函数

OpenCV英文官方文档链接:OpenCV: OpenCV-Python Tutorials

OpenCV中文文档:OpenCV官方文档_w3cschool

OpenCV中文文档:OpenCV中文官方文档 (woshicver.com)

(1)图像读取与颜色空间转换

img_bgr = cv2.imread("1.jpg")
img_gray = cv2.imread("1.jpg", cv2.IMREAD_GRAYSCALE)

img_hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV)
img_gray1 = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY)

(2)图像的显示

cv2.imshow("img_bgr", img_bgr)
cv2.waitKey(0)
cv2.destroyAllWindows()

(3)图像基本属性


img_bgr.shape
h,w = img_bgr.shape[:2]

img_b = img_bgr[:, :, 0]
img_g = img_bgr[:, :, 1:2]
img_r = img_bgr[:, :, 2:3]

img_bgr.size

img_bgr[0:100,0:500]

np.zeros((100, 200), dtype=np.uint8)

(4)图像滤波

常用滤波算法包含如下几类:均值滤波、中值滤波、高斯滤波、双边滤波等


img_median_blur = cv2.medianBlur(img_bgr, 3)

img_blur = cv2.blur(img_bgr, (3, 3))

img_gaussian = cv2.GaussianBlur(img_blur, (3, 3), sigmaX=1)

img_bilater = cv2.bilateralFilter(img, 5, 75, 75)

(5)图像二值化


_, img_threshold = cv2.threshold(img_gray, 100, 255, cv2.THRESH_BINARY)

(6)图像形态学处理


kernel = np.ones((3, 3))
cv2.erode(img_bgr, kernel, iterations=2)
cv2.dilate(img_bgr, kernel, iterations=2)
cv2.morphologyEx(img_bgr, cv2.MORPH_OPEN, kernel, iterations=2)
cv2.morphologyEx(img_bgr, cv2.MORPH_CLOSE, kernel, iterations=2)

(7)图像的边缘提取


canny = cv2.Canny(img_bgr, 100, 200)

(8)图像的轮廓提取


contours, _ = cv2.findContours(img_threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cv2.drawContours(img_bgr, contours, -1, (255, 0, 0), 2)

(9)仿射变换


src = np.float32([[748, 120], [750, 1300], [115, 1280], [110, 121]])
dst = np.float32([[660, 0], [660, 1110], [0, 1110], [0, 0]])
M = cv2.getPerspectiveTransform(src, dst)
img_p = cv2.warpPerspective(img_bgr, M, (660, 1110))

(10)霍夫圆变换

HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None):
image:要检测的圆的图像,minDist:检测到的圆之间的最小中心距离,minRadius、maxRadius检测到圆的最小半径和最大半径
method:检测方法,当前有cv2.HOUGH_GRADIENT和cv2.HOUGH_GRADIENT_ALT 2种方法,后者是前者的改进方法
dp:检测圆心的累加器精度和图像精度比的倒数,比如dp=1时累加器和输入图像有相同的分辨率,dp=2时累加器是输入图像一半大的宽高;method=cv2.HOUGH_GRADIENT_ALT时推荐设置dp=1.5
param1:特定方法参数,和method配合;当method=cv2.HOUGH_GRADIENT或method=cv2.HOUGH_GRADIENT_ALT时,该参数是canny检测的高阈值,低阈值是该参数的一半;method=cv2.HOUGH_GRADIENT_ALT时,内部使用Scharr计算图像梯度,这个值通常要设置得更大。
param2:特定方法参数,和method配合;当method=cv2.OUGH_GRADIENT,它表示检测阶段圆心的累加器阈值,越小就会检测到更多的圆,越大能通过检测的圆就更加精确。当method=cv2.HOUGH_GRADIENT_ALT时,该参数可以看做是圆的"完美性"度量,它越接近1算法选择的圆形形状越好,一般可以设置在0.9。如果想要更好地检测小圆,可以设置在0.85、0.8甚至更小,通过限制搜索范围[minRadius,maxRadius]可以避免出现许多假圆。
具体可参考官方文档,及如下博文:https://blog.csdn.net/juzicode00/article/details/122263456

cv2.HoughCircles(img_bgr, cv2.HOUGH_GRADIENT, 1, 100, param1=150, param2=200, minRadius=50, maxRadius=80)  # 检测圆的最大半径80,最小半径50,检测到的两个圆之间的距离最小为100,内置canny算法的高阈值为150,低阈值为75

(11)霍夫直线检测

HoughLines(image, rho, theta, threshold, lines=None, srn=None, stn=None, min_theta=None, max_theta=None):
image:要检测直线的图像,rho累加器的距离分辨率,以像素为单位,theta:以弧度表示的参数的分辨率,threshold:阈值,被认为是一条直线的最低投票数

cv2.HoughLines(img_bgr, 1, np.pi / 180, 100, min_theta=np.pi / 6, max_theta=np.pi / 3)  # 检测角度在30°到60°之间的直线

Original: https://blog.csdn.net/sodaANDcola/article/details/125621572
Author: 苏打水可乐
Title: OpenCV图像预处理常用函数及流程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/703701/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球