Python教程

python 四cv2库

本文主要是介绍python 四cv2库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

https://blog.csdn.net/qq_40962368/article/details/80444144

pip install opencv-python ;import cv2

1、图像的读取、复制、显示、保存

 ①cv2.imread(filename='f_path',flags=1)  flags默认值为1 表示彩图模式打开,flags=0打开灰图。

 ②因为img是numpy.ndarray类型,像素值当np访问处理;img.copy()深度复制。

  img.shape(height,width,3)

 图片显示挺麻烦的,可以改用from PIL import Image(效果也不太好啊,还是cv2.imwrite保存后再看吧)

cv2.namedWindow('hello')  # 必须创建窗口
cv2.imshow('hello', img)
cv2.waitKey(0)    # 让图片在使窗口保持住
cv2.destroyAllWindows()
img_pil = Image.fromarray(img.astype('uint8')).convert('RGB')
img = numpy.array(img_pil)
Image.show(img_pil)

 ③cv2.imwrite(filename='f_path', img1, params=[cv2.IMWRITE_JPEG_QUALITY, 80])  

 params:对于JPEG格式后面的80是指图片质量,默认95 最高100,设置为个位数的保存图片很模糊。

     对于PNG格式[cv2.IMWRITE_PNG_COMPRESSION, 0],后面的0表示图片压缩程度:从0到9压缩级别越高,图片尺寸越小。

 最后cv2.IMWRITE_JPEG_QUALITY是一个整数常数,详细追究无意义!

2、r g b通道分离、拼接与合并

 分离 b,g,r = cv2.split(img)  r==img[:,:,2]

 拼接 pic = np.zeros(np.shape(img), np.uint8)

    pic[:,:,0] = b  pic[:,:,2] = r  

 合并 megre = cv2.merge([b, g, r]),  还可以使用np的方式np.dstack([b,g,r])或np.concatenate((b,g,r),axis=2)

3、绘制简单的几何图形、显示文字

 https://blog.csdn.net/qq_40962368/article/details/80463108

import cv2
import numpy as np
img = np.zeros([512, 512, 3])
cv2.line(img, (255, 400), (255, 0), (255, 0, 255), 9)
cv2.rectangle(img, (150, 150), (350, 350), (255, 255, 0), 2)
cv2.imwrite('line_rect.jpg',img)
cv2.circle(img, (255, 255), 50, (0, 0, 255), 1)
cv2.circle(img, (400, 150), 20, (255, 100, 100), 25)
cv2.ellipse(img, (255, 255), (170, 70), 20, 0, 270, (0, 255, 0), 2)
pts = np.array([[50, 190], [380, 420], [255, 50], [120, 420], [450, 190]])  # pts.shape=(num_points,2)
cv2.polylines(img, [pts], True, (255, 255, 0), 15)

   

 直线 cv2.line(img, 直线起点坐标,终点坐标,颜色,直线粗细)

 矩形 cv2.rectangl(img, 矩形左上角坐标,矩形右下角坐标,颜色,矩形边的线的粗细)  

 圆 cv2.circle(img, 圆心坐标, 半径, 颜色, 圆弧的粗细)

 椭圆 cv2.ellipse(img, 椭圆圆心, 长轴半径和短轴半径, 长轴逆时针偏角, 逆时针开始画弧线的角度, 划弧线结束时的角度, 颜色, 弧线粗细)  #负数则为顺时针

 多边形 cv2.polylines(img, [np.shape=(num_points)], 首尾两点是否连接, 线的粗细)

  文字  cv2.putText(img, 'wen huai yi shi xin', (10, 255), font=cv2.FONT_HERSHEY_SIMPLEX, 1.6, (255, 255, 0), 2) 

   cv2.putText(img, '内容',文字起始位置,font,单个文字大小,文字粗细)

 总结:以上关于角度默认逆时针,关于点坐标(x-width, y-height)

4、图像的简单几何变换

cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
cv2.resize(img, (int(0.8*width), int(0.8*height)), interpolation=cv2.INTER_AREA)
rows, cols = img.shape[:2]    # height,width
M1 = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 0.5)  # 设置变换方式  
cv2.warpAffine(img, M1, (cols, rows))

①缩放resize:缩放因子fx,fy > 1时扩大,否则缩小。 因凸显变化而有的插值问题,扩大时用cv2.INTER_CUBIC和cv2.INTER_LINEAR,缩小时用cv2.INTER_AREA

②旋转:cv2.getRotationMatrix2D(旋转中心,旋转角度,旋转后resize的缩放因子)。

  注意:旋转的是M1,img的值没有改变!

5、常用cv2函数

 ①cv2.minAreaRect寻找最小矩形(包含所有poly中的点)

 输入:poly必须为ndarray类型,poly.shape=(num_points, 2)

 输出:rect元组((x0,y0),(width,height),theta) ,其中角度的正负 width是那条边取决于cv2的版本了!

 

 

这篇关于python 四cv2库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!