说明:本教程是我在学习opencv官方文档中文版时做的笔记,后面会接着更新。
4 图片
img = cv2.imread('messi5.jpg',0)
灰度模式读入图片
cv2.imshow('image',img)
第一个参数是窗口名字,其次才是我们的图像
cv2.waitKey(0)
键盘绑定函数
cv2.destroyAllWindows()
删除建立的窗口。
cv2.namedWindow('image',cv2.WINDOWNORMAL)
可以调整窗口大小
cv2.imwrite('messigray.png',img)
位置在当前项目下
if cv2.waitKey(1) & 0xFF == ord('q'):
break
注:如果你用的是 64 位系统,你需要将 k = cv2.waitKey(0) 这行改成k = cv2.waitKey(0)&0xFF。
==27 Esc退出
5 视频
cap = cv2.VideoCapture(0) 索引号在指定要使用的摄像头。一般的笔记本电脑内置摄像头参数就是 0
cap.isOpened()
,来检查是否成功初始化了
cap.set(propId,value)
修改视频的一些属性
ret=cap.set(3,320) ret=cap.set(4,240)
来把宽和高改成 320X240。
6 OpenCV 中的绘图函数
• img:你想要绘制图形的那幅图像。
• color:形状的颜色。如:(255,0,0)代表蓝色。对于灰度图只需要传入灰度值。
• thickness:线条的粗细。如果给一个闭合图形设置为 -1,那么这个图形就会被填充。默认值是 1.
• linetype:线条的类型,8 连接,抗锯齿等。默认情况是 8 连接。cv2.LINE_AA为抗锯齿,这样看起来会非常平滑。
cv2.line(img,(0,0),(511,511),(255,0,0),5)
图片,起点,终点,颜色,粗细
cv2.rectangle(img,(384,0),(510,128),(0,255,0),3)
图片,左上角 右下角 颜色 粗细
cv2.circle(img,(447,63), 63, (0,0,255), -1)
图片 圆心 半径 颜色 -1封闭
cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
图片 椭圆心 (长轴,短轴) 逆时针旋转角度 顺时针旋转角度 封闭
``font=cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img,‘OpenCV’,(10,500), font, 4,(255,255,255),2)` 图片上绘制文字
7 把鼠标当画笔
创建图像与窗口并将窗口与回调函数绑定
img=np.zeros((512,512,3),np.uint8)
cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_circle)
窗口,回调函数
8 用滑动条做调色板
cv2.getTrackbarPos() 函数的一个参数是滑动条的名字,第二个参数是滑动条被放置窗口的名字,第三个参数是滑动条的默认位置。第四个参数是滑动条的最大值,第五个函数是回调函数,每次滑动条的滑动都会调用回调函数。回调函数通常都会含有一个默认参数,就是滑动条的位置。
滑动条的另外一个重要应用就是用作转换按钮。创建一个转换按钮,只有当装换按钮指向 ON 时,滑动条的滑动才有用。
[外链图片转存失败(img-v1F514BE-1565693696911)(E:\CV\笔记\调色板.png)]
9 图像的基础操作
获取的像素值,对 BGR 返回值为 B,G,R 的值。对灰度图像返回他的灰度值,对RGB返回一个集合
修改像素值(不推荐使用)
img[100,100]=[255,255,255]
图像的属性包括:行,列,通道,图像数据类型,像素数目等
img.shape 可以获取图像的形状。返回值是一个包含行数,列数,通道数的元组
注意:如果图像是灰度图,返回值仅有行数和列数。所以通过检查这个返回值就可以知道加载的是灰度图还是彩色图
img.size 可以返回图像的像素数目
img.dtype 返回的是图像的数据类型.
b,g,r=cv2.split(img)
BGR 拆分成单个通道
img=cv2.merge(b,g,r)
合并BGR通道
警告:cv2.split() 是一个比较耗时的操作。只有真正需要时才用它,能用
Numpy 索引就尽量用
b=img[:,:,0]
假如使所有像素的红色通道值都为 0,你不必先拆分再赋值。你可以直接使用 Numpy 索引,这会更快。
cv2.resize() 改变图文大小
img1 = cv2.resize(img1,(400,600),interpolation = cv2.INTER_CUBIC)
Note: 参数interpolation不能少
CV_INTER_NN - 最近邻插值,
CV_INTER_LINEAR - 双线性插值 (缺省使用)
CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法…
CV_INTER_CUBIC - 立方插值.
10 图像上的算术运算
OpenCV 的加法是一种饱和操作,而 Numpy 的加法是一种模操作。
图像合并:计算公式如下:g (x) = (1-α) f0 (x) + αf1 (x)
dst=cv2.addWeighted(img1,0.7,img2,0.3,0)
cv2.imshow('dst',dst)
检测程序效率:
e1 = cv2.getTickCount()
#your code execution
e2 = cv2.getTickCount()
time = (e2 - e1)/ cv2.getTickFrequency()
13 颜色空间转换
转换颜色空间:
cv2.cvtColor(input_image,flag)
flag就是转换类型
BGR↔Gray 的转换, flag 是 cv2.COLOR_BGR2GRAY
BGR↔HSV 的转换, flag 是 cv2.COLOR_BGR2HSV
14 几何变换
扩展缩放图片尺寸:,
[外链图片转存失败(img-b54B5hDX-1565693696911)(E:\CV\笔记\扩展缩放.png)]
平移:
img = cv2.imread('C:\\122.jpg')
M = np.float32([[1, 0, 10]