Python-OpenCv入门语法

 持续更新中,最进更新24年6月12日

目录

安装opencv

Python基础语法

导入opencv

 打印版本号

导入图片 

 打印图片,线性代数形式

​编辑输出图片,图片形式:

创建一个空窗口:

控制图片窗口存在时间 :

设置图片窗口大小:

设置图片窗口显示位置: 

摧毁图片窗口:

保存图像:


安装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    检测的最大圆的半径

 

OpenCV C++中,`findContours`函数的语法如下: ```c++ void findContours(InputOutputArray image, OutputArrayOfArrays contours, OutputArray hierarchy, int mode, int method, Point offset = Point()); ``` 其中,参数含义如下: - `image`:输入的二值图像,通常为经过边缘检测后得到的图像。 - `contours`:输出的轮廓,为一个`vector<vector<Point> >`类型的数组,其中每个元素表示一个轮廓,包含一系列点的坐标。 - `hierarchy`:输出的轮廓的层级关系,为一个`vector<Vec4i>`类型的数组,其中每个元素包含四个整数,分别表示当前轮廓的父轮廓、子轮廓、内嵌轮廓和外层轮廓的索引。 - `mode`:轮廓检索模式,可以取以下值: - `RETR_EXTERNAL`:只检索最外层的轮廓。 - `RETR_LIST`:检索所有轮廓,但不建立轮廓间的层级关系。 - `RETR_CCOMP`:检索所有轮廓,并将轮廓分为两层:顶层为各部分的外部边界,次层为空洞的边界。 - `RETR_TREE`:检索所有轮廓,并重构嵌套轮廓的完整层级关系。 - `method`:轮廓逼近方法,可以取以下值: - `CHAIN_APPROX_NONE`:保存物体边界上所有连续的轮廓点到contours向量内。 - `CHAIN_APPROX_SIMPLE`:压缩水平、垂直和对角线方向上的像素,仅保留终点坐标。 - `CHAIN_APPROX_TC89_L1`:使用Teh-Chin链逼近算法中的L1距离。 - `CHAIN_APPROX_TC89_KCOS`:使用Teh-Chin链逼近算法中的Kcos距离。 - `offset`:可选的偏移量,用于指定轮廓点坐标的偏移值。 例如,在检测最外层轮廓并使用简单的轮廓逼近方法时,可以这样调用`findContours`函数: ```c++ Mat img = imread("test.jpg", IMREAD_GRAYSCALE); Mat img_canny; Canny(img, img_canny, 100, 200); vector<vector<Point>> contours; findContours(img_canny, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); ``` 这将读入名为`test.jpg`的灰度图像,对其进行Canny边缘检测,并在其中寻找最外层轮廓,使用简单的轮廓逼近方法。最终,找到的轮廓将存储在`contours`向量内。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值