持续更新中,最进更新24年6月12日
目录
安装opencv
pip install opencv-python
注意: opencv会自动安装依赖库numpy库
Python基础语法
导入opencv
import cv2
打印版本号
print(cv2.__version__)
图片的基本操作:
导入图片
img = ("文件地址")
注意:路径不能含有中文
输出图片,线性代数形式
print(img)
输出图片,图片形式:
cv2.imshow('yu',img)
# 第一个参数是图片窗口名称,第二个参数是引用图片
图片窗口基本操作:
创建一个空窗口:
cv2.namedWindow('blank', cv2.WINDOW_NORMAL)
第一个参数是窗口名称,第二个参数控制显示模式。
显示模式有:(1)WINDOW_AUTOSIZE,根据图片大小自动设置窗口大小。(2)WINDOW_NORMAL,可以随意调整窗口大小。
控制图片窗口存在时间 :
cv2.waitKey(X)
等待X毫秒后自动执行后续代码 ,0为不自动执行。按任意键盘按键可执行
设置图片窗口大小:
img = cv2.resize(img, (1024, 800))
设置图片窗口显示位置:
cv2.moveWindow('blank', 300, 100)
第一个参数为窗口名称,第二个参数为窗口显示位置x,y轴
摧毁图片窗口:
v2.destroyWindows('yu')
v2.destroyAllWindows()
第一个为摧毁单个窗口有参数,摧毁窗口名称
第二个为摧毁全部窗口无参数
保存图像:
retval = cv2.imwrite(filename, img [, paras])
filename:要保存的文件的路径和名称,包括文件扩展名,常见的三个png,jbeg,bmp
img:要保存的 OpenCV 图像,nparray 多维数组
paras:不同编码格式的参数,可选项
cv2.CV_IMWRITE_JPEG_QUALITY:设置 .jpeg/.jpg 格式的图片质量,取值为 0-100(默认值 95),数值越大则图片质量越高;
cv2.CV_IMWRITE_WEBP_QUALITY:设置 .webp 格式的图片质量,取值为 0-100;
cv2.CV_IMWRITE_PNG_COMPRESSION:设置 .png 格式图片的压缩比,取值为 0-9(默认值 3),数值越大则压缩比越大。
retval:返回值,保存成功返回 True,否则返回 False
例子:
import cv2
img = cv2.imread("D:\\py+subject[yzyh]\\opencv+yzyh\\SuA_OMR20.jpeg")
cv2.imwrite('fish.jpg', img,[cv2.IMWRITE_JPEG_QUALITY,20])
print("over")
修改图片颜色空间:
修改图片为灰色空间
cv2.cvtColor(img, cv.COLOR_BGR2GRAY)
COLOR_BGR2GRAY:将BGR图像转换为灰度空间。
COLOR_BGR2HSV: 将BGR图像转换为HSV图像。
COLOR_BGR2RGB: 将BGR图像转换为RGB图像(注意OpenCV默认使用BGR格式)。
COLOR_GRAY2BGR: 将灰度图像转换为BGR图像。
COLOR_HSV2BGR: 将HSV图像转换为BGR图像。
在图片中绘制图形:
绘制线条:
绘制一条粗度为6的红线 BGR
cv2.line(img, (0, 0), (800, 400), (0, 0, 255), 6)
第一个参数 (img)是传入图像
第一个括号里的参数为起始点的X轴Y轴
第二个括号里的参数为终止点的X轴Y轴
第三个括号里的参数BGR分别为:蓝色(Blue),绿色(Green),红色(Red)
第四个参数为线的粗细
绘制四边形:
绘制一个红色四边形
cv2.rectangle(img, (30, 30), (400, 200), (0, 0, 255), 2)
第一个参数 (img)是传入图像
第一个括号里的参数是四边形的左上角X,Y轴:
第二个括号里的参数是四边形的右上角X,Y轴:
第三个括号里的参数是第三个括号里的参数BGR分别为:蓝色(Blue),绿色(Green),红色(Red)
第四个参数为线的粗细
绘制圆形:
cv.circle(img, (150, 150), 100, (0,0,255), 1)
第一个参数 (img)是传入图像
第一个括号里的参数是圆心的X,Y轴:
第三个参数(100)是圆形的半径:
第四个参数括号里BGR分别为:蓝色(Blue),绿色(Green),红色(Red)
第五个参数为线的粗细
绘制椭圆形:
img1 = cv.ellipse(img, (150, 150), (100, 50), -45, 0, 360, (255, 255, 255), 2)
第一个参数 (img)是传入图像
第二个参数括号里的参数是圆心的X,Y轴:
第三个参数括号里的参数是轴的长轴和短轴:
第四个参数是椭圆沿逆时针方向旋转的角度:
第五和第六个参数分别代表从主轴沿顺时针方向的椭圆弧的开始和结束
第七个参数括号里代表BGR分别为:蓝色(Blue),绿色(Green),红色(Red)
第八个参数括号里代表线的粗细
绘制多边形:
写字:
cv2.putText(img,'OpenCV Tuts!',(0,130), font, 1, (200,255,155), 2, cv2.LINE_AA)
font是定义的字体类型,opencv提供了以下几种字体:
标识符 描述
CV::FONT_HERSHEY_SIMPLEX 普通大小无衬线字体
CV::FONT_HERSHEY_PLAIN 小号无衬线字体
CV::FONT_HERSHEY_DUPLEX 普通大小无衬线字体
CV::FONT_HERSHEY_COMPLEX 比CV::FONT_HERSHEY_SIMPLEX更复杂
CV::FONT_HERSHEY_TRIPLEX 普通大小无衬线字体,比cv::FONT_HERSHEY_DUPLEX更复杂
CV::FONT_HERSHEY_COMPLEX_SMALL 普通大小无衬线字体,比CV::FONT_HERSHEY_COMPLEX更复杂
CV::FONT_HERSHEY_SCRIPT_SIMPLEX 小号版本的CV::FONT_HERSHEY_COMPLEX手写体
CV::FONT_HERSHEY_SCRIPT_COMPLEX 比CV::FONT_HERSHEY_SCRIPT_SIMPLEX更复杂的变体
个人感觉最后两种真漂亮
这里的像素点坐标是指字体左上角的像素点。
参数font后面跟的1是fontScale,即字体的高度大小。
接下来的2是字体的粗细。
最后可以发现这里用到的lineType是cv2.LINE_AA型,这个类型是“使用高斯滤波平滑处理的直线”。这个线条类型用来写字看起来会有深有浅,同样画直线时可以使用这种类型来试试看。
最后一个参数bottomLeftOrigin是bool型,默认为False。当这个bool参数为True时,第三个参数的坐标便变成字体右下角的像素点而不是左上角。
人脸识别:
圆形识别(HoughCircles):
HoughCircles(image, method, dp, minDist, circles=None, param1=None, param2=None, minRadius=None, maxRadius=None)
参数:
image 原始图像
method 目前只支持cv2.HOUGH_GRADIENT
dp 图像解析的反向比例。1为原始大小,2为原始大小的一半
minDist 圆心之间的最小距离。过小会增加圆的误判,过大会丢失存在的圆
param1 Canny检测器的高阈值
param2 检测阶段圆心的累加器阈值。越小的话,会增加不存在的圆;越大的话,则检测到的圆就更加接近完美的圆形
minRadius 检测的最小圆的半径
maxRadius 检测的最大圆的半径