python opencv学习教程

说明:本教程是我在学习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]
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值