python 四cv2库
2021/11/23 17:10:07
本文主要是介绍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库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门