读入图片
src_1 = cv2.imread(r"../3.jpg", 0) src_3 = cv2.imread(r"../3.jpg")
|
转换图片
gray = cv2.cvtColor(src_3, cv2.COLOR_BGR2GRAY)
|
图像里增添内容
写字
> def putText(img, text, org, fontFace, fontScale, color, thickness=None, lineType=None, bottomLeftOrigin=None): >
|
- img:图片
- text:文字内容
- org:坐标
- fontFace:字体类型
- fontScale:字体大小
- color:颜色
- thickness:字体粗细
cv2.putText(img, '文字内容', (100, 100), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1)
|
画直线
画矩形
TODO
画圆圈
> def circle(img, center, radius, color, thickness=None, lineType=None, shift=None): >
|
- img:图片
- center:圆形的中心坐标
- radius:半径
- color:颜色
- thickness:粗细
cv2.circle(img, (100, 100), 100, color, 2) cv2.circle(img, (100, 100), 2, color, 1)
|
画轮廓
图像、轮廓列表、要画的轮廓坐标-1所有、颜色、粗细
cv2.drawContours(bgr_img, contours, -1, (0, 0, 255), 2)
|
设置整张图片纯颜色
circles_img[:, :, 0] = 255 circles_img[:, :, 1] = 255 circles_img[:, :, 2] = 255
|
复制图片
- 不想影响原图,而要复制一个模板图片出来处理时可用的方法
腐蚀处理
erosion = cv2.erode(th1, kernel, iterations=1)
|
膨胀处理
dilation = cv2.dilate(erosion, kernel, iterations=1)
|
开运算/闭运算
res = cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel, iterations=1)
res = cv2.morphologyEx(src, cv2.MORPH_CLOSE, kernel, iterations=1)
|
阈值处理
处理单通道图片,颜色大于140的设置为255
ret, th1 = cv2.threshold(temp_img, 140, 255, cv2.THRESH_BINARY)
|
查找轮廓
contours, hierarchy = cv2.findContours(dilate, cv2.CONTOURS_MATCH_I1, 2)
|
inRange()
OpenCV中的inRange()函数可实现二值化功能(这点类似threshold()函数),更关键的是可以同时针对多通道进行操作,使用起来非常方便!主要是将在两个阈值内的像素值设置为白色(255),而不在阈值区间内的像素值设置为黑色(0),该功能类似于之间所讲的双阈值化操作。
bitwise_not()
是对二进制数据进行“非”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“非”操作,~1=0,~0=1
addWeighted()
图像融合,可以给两个图片各自的比重
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
Canny边缘检测
img_ray = cv2.Canny(erosion, 50, 100)
|
找圆
cv2中进行霍夫圆环检测的函数:
cv2.HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
参数详解:
image:8位,单通道图像。如果使用彩色图像,需要先转换为灰度图像
method:定义检测图像中圆的方法。目前唯一实现的方法是cv2.HOUGH_GRADIENT
dp:累加器分辨率与图像分辨率的反比。dp获取越大,累加器数组越小
minDist:检测到的圆的中心,(x,y)坐标之间的最小距离。如果minDist太小,则可能导致检测到多个相邻的圆。如果minDist太大,则可能导致很多圆检测不到
param1:用于处理边缘检测的梯度值方法
param2:cv2.HOUGH_GRADIENT方法的累加器阈值。阈值越小,检测到的圈子越多
minRadius:半径的最小大小(以像素为单位)
maxRadius:半径的最大大小(以像素为单位)
circles = cv2.HoughCircles(imgray, cv2.HOUGH_GRADIENT, 1, 10, param1=100, param2=10, minRadius=13, maxRadius=15) for i in circles[0, :]: cv2.circle(img, (i[0], i[1]), i[2], (0, 255, 0), 2) cv2.circle(img, (i[0], i[1]), 2, (0, 0, 255), 3)
|
模糊处理
高斯模糊
blur = cv.GaussianBlur(img,(5,5),0)
|
双边滤波
blur = cv.bilateralFilter(img,9,75,75)
|
图像几何运算
仿射变换(旋转矩阵)
rot_mat = cv2.getRotationMatrix2D(center, -5, 1) cos = rot_mat[0,0] sin = rot_mat[0,1]
|
cv2.warpAffine(img, rot_mat, (img.shape[1], img.shape[0]))
|
参数说明: img表示输入的图片,rot_mat表示仿射变化矩阵,(image.shape[1], image.shape[0])表示变换后的图片大小
外接矩形