cv库基本操作

引用:https://blog.csdn.net/wfei101/article/details/82024877

1. 图片加载、显示和保存

import cv2
 #读取图像  "01.jpg":图像位置  0:通道参数
imgGrey = cv2.imread("01.jpg",0)

#显示图像  "img":图像名字    img:需要显示的图像

#往往跟waitKey搭配使用   2000:显示2000ms
cv2.imshow("img",img)
cv2.waitKey(2000)

#图片保存   "Copy.jpg":图像保存路径    img:需要保存的图像
cv2.imwrite("Copy.jpg",img)

2. 图像显示窗口创建与销毁

#跟cv2.imshow搭配使用 窗口名

cv2.namedWindow(窗口名,属性) 创建一个窗口

#很多情况下面没用 

cv2.destoryAllWindows(窗口名) 删除任何建立的窗口

3. 图片宽、高、通道数获取

#img.shape返回一个图像矩阵元组

  1. sp1 = img.shape

4. 图像像素数目和图像数据类型获取

#图像分辨率  300*500即图像像素数量

imgSize = img.size

#一般是uint8归一化之前

ty = img.dtype

5. 生成指定大小的空图像

imgZero = np.zeros(img.shape,np.uint8)

imgFix = np.zeros((300,500,3),np.uint8)

6. 访问和操作图像像素 

像素点颜色是由三个通道共同决定的。三原色红黄蓝:(255,0,0),(0,255,0),(0,0,255)

RGB分为3个通道,0-255表示通道颜色的亮度,3通道叠加才是我们看到的图像

#图像上一个像素点改为蓝色

  1. numb = img[50,100]

  2. img[50,100] = (0,0,255)

分开访问图像某一通道像素值 

#把0通道的0-100*100-200面积的颜色亮度调到最高

  1. img[0:100,100:200,0] = 255

  2. #把0-50*1-100面积颜色改为蓝色

  3. img[0:50,1:100] = (0,0,255)

7. 图像三通道分离和合并

元组提取成3个通道
b , g , r = cv2.split(img)

三通道合一
merged = cv2.merge([b,g,r])

 8. 在图像上输出文字

‘’‘img:图像

Print some text to img:文字内容

(100,100)文字左下角坐标

cv2.FONT_HERSHEY_SIMPLEX:字体

0.54:文字大小

1:字体粗细

(0,0,255):颜色

’‘’

cv2.putText(img,"Print some text to img",(100,100),cv2.FONT_HERSHEY_SIMPLEX,0.54,1,(0,0,255))

9. 图像缩放

#img:输入图像

#img2.jpg:输出图像

#(2*cols, 2*rows) 输出图片尺寸

#0.5,0.5 沿着x,y轴缩放系数

#interpolation 插入方式

img_ex = cv2.resize(img, "img2.jpg",(2*cols, 2*rows),0.5,0.5, interpolation=cv2.INTER_CUBIC)

 10:灰度转换

path = 'static/111.jpg'
img = cv2.imread(path,-1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

11:图片二值化

# 利用Sobel边缘检测生成二值图
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 0, ksize=3)

 12:二值化

# 二值化
ret, binary = cv2.threshold(sobel, 40, 255, cv2.THRESH_OTSU + cv2.THRESH_BINARY)

13:返回指定形状和尺寸的结构元素

矩形:MORPH_RECT;

交叉形:MORPH_CROSS;

椭圆形:MORPH_ELLIPSE;

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11)) 

14:膨胀(突出轮廓)腐蚀(消除细节)

dilation = cv2.dilate(binary, element2, iterations=1)
erosion = cv2.erode(dilation, element1, iterations=1)

15:检测物体轮廓

#dilation,二值图像

contours, hierarchy = cv2.findContours(dilation ,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) 

16:最小外接矩形

rect = cv2.minAreaRect(cnt)

box = cv2.boxPoints(rect)
#box:外接矩形4点坐标
box = np.int0(box)

17:图像旋转

#center:旋转中心位置坐标
#angle:旋转角度
#dsize:图片缩放
rotate_matrix = cv2.getRotationMatrix2D(center=(center_x, center_y), angle=angle, scale=1)
rotated_image = cv2.warpAffine(src=img, M=rotate_matrix, dsize=(img_w, img_h))

 18画标签框

方框

#angel_image:图片

#(int(points[0][0]), int(points[0][1])), (int(points[1][0]), int(points[1][1])),左上角右下角坐标,原点为左上角

#color:框颜色

#thickness框宽度

cv2.rectangle(angel_image,  (int(points[0][0]), int(points[0][1])), (int(points[1][0]), int(points[1][1])), color=(0, 0, 255), thickness=1)
cv2.imshow('aaa', angel_image)

多边形框:

#需要描点的坐标

points=[[12,24],[34,57],[323,434],[321,7657]]

pts = np.array(points, np.int32)  # 数据类型必须为 int32
pts = pts.reshape((-1, 1, 2))
# 绘制未填充的多边形
cv2.polylines(angel_image, [pts], isClosed=True, color=(0, 0, 255), thickness=1)

猜你喜欢

转载自blog.csdn.net/GZ_public/article/details/127280799
今日推荐