OpenCV_base

图片
加载图片:cv2.imread(‘图片文件名’,1彩色图/0灰度图/-1包含透明通道的彩色图)#图片若不在py文件中,则需要绝对路径,且不含中文。


根据图片大小自适应串口,显示图片:cv2.imshow(‘窗口名’,已加载的参数名)

#如果需要在已经打开的窗口显示图片,窗口名需一致

程序暂停(ms):cv2.waitKey(time)#0表示等待,等待期间也可以获取用户的按键输入

创建一个窗口:cv2.namedWindow(1,2) #1窗口的名字,2默认是cv2.WINDOW_AUTOSIZE,表示窗口大小自适应图片,也可以设置为cv2.WINDOW_NORMAL,表示窗口大小可调整

保存图片:cv2.imwrite(1,2) #1是包含后缀名的文件名,2为已加载的参数名 #在参数1中,写上路径,教程中是没有写,但是我搜索电脑之后发现没有这个文件,在添加路径之后就可以了

摄像头

打开摄像头:cv2.VideoCapture(0)创建VideoCapture对象 #0指摄像头的编号,如果你电脑上有两个摄像头的话,访问第2个摄像头就可以传入1,依此类推 #如将数字改成路径,则是播放视频。
获取一帧:ret,frame = capture.read() #由于获取是一帧一帧的,因此需要在循环中不断获取帧 #返回值ret为布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵

等待键盘输入:
cv2.waitKey(1),waitKey()方法本身表示等待键盘输入,
#参数是1,表示延时1ms切换到下一帧图像,对于视频而言;参数为0,如cv2.waitKey(0)只显示当前帧图像,相当于视频暂停,;参数过大如cv2.waitKey(1000),会因为延时过久而卡顿感觉到卡顿。
c得到的是键盘输入的ASCII码,esc键对应的ASCII码是27,即当按esc键是if条件句成立

转换颜色:cv2.cvtColor(图,颜色),这里将彩色图转成灰度图。
另外,通过cap.get(propId)可以获取摄像头的一些属性,比如捕获的分辨率,亮度和对比度等。propId是从0~18的数字,代表不同的属性,完整的属性列表可以参考:VideoCaptureProperties。也可以使用cap.set(propId,value)来修改属性值。
判断是否正常打开:capture.isOpened() #返回的是布尔值

#30表示停留时间,越大,播放越慢。

录制视频1
创建对象 cv2.VideoWriter(1#输出的文件名,如’output.avi’, 2 #编码方式FourCC码, 3 #帧率FPS, 4 #要保存的分辨率大小) #录制或保存视频

FourCC是用来指定视频编码方式的四字节码,所有的编码可参考Video Codecs。如MJPG编码可以这样写: cv2.VideoWriter_fourcc(*‘MJPG’) 或 cv2.VideoWriter_fourcc(‘M’,‘J’,‘P’,‘G’)

#流程: 打开摄像头,创建VideoWriter对象,传入参数,在循环中:读帧,写帧

图像基本操作

1.获取和修改像素点值:(此法只改变了内存中的img像素点,因为没有保存,所以原图无改变)
①读入图片 ②获取像素点值 px = (读入的图片)(y,x)#行列分别对应y,x #只获取蓝色通道值,px_blue = (读入的图片)[y,x,0] #0蓝色 B 1绿色 G 2红色 R
③img[100, 90] = [255, 255, 255] #改变这个像素点的B G R
⭐性能更好的方式:获取:img.item(100,100,0),修改:img.itemset((100,100,0),255) #但这种方式只能B,G,R逐一进行。(选择这个点的基色,修改属性)
2.获取图像的形状:对象名.shape #返回一个包含行数(高度)、列数(宽度)和通道数的元组,灰度图只返回行数和列数

3.获取图片数据类型:对象名.dtype #经验之谈:多数错误是因为数据类型不对导致的,所以健壮的代码应该对这个属性加以判断

4.获取图像总像素数:对象名.size
5.ROI(Region of Interest) #如我们要检测眼睛,因为眼睛肯定在脸上,所以我们感兴趣的只有脸这部分,其他都不care,所以可以单独把脸截取出来,这样就可以大大节省计算量,提高运行速度

6.通道分隔与合并:彩色图的BGR三个通道是可以分开单独访问的,也可以将单独的三个通道合并成一副图像。分别使用cv2.split()和cv2.merge():

split()比较耗时,用numpy中的索引跟高效





颜色空间转换

1.函数:cv2.cvtColor(), cv2.inRange() #cv2.cvtColor()用来进行颜色模型转换,参数1是要转换的图片,参数2是转换模式, COLOR_BGR2GRAY表示BGR→Gray,可用下面的代码显示所有的转换模式:
2.视频中特定颜色物体追踪(HSV模型)#OpenCV中色调H范围为[0,179],饱和度S是[0,255],明度V是[0,255]。虽然H的理论数值是0°~360°,但8位图像像素点的最大值是255,所以OpenCV中除以了2,某些软件可能使用不同的尺度表示,所以同其他软件混用时,记得归一化。
步骤:
1.捕获视频的一帧 #capture.read()
2.从BGR转换到HSV #cv2.cvtColor()
3.提取蓝色范围的物体# cv2.inRange():介于lower/upper之间的为白色,其余黑色
4.只显示蓝色物体 #cv2.bitwise_and
#蓝色光范围获取:先将标准蓝色的BGR值用cvtColor()转换:
根据此调节范围

总结:获取视频中每个像素点的BGR数值,转换成HSV数值,插入红蓝绿的HSV范围,与视频的HSV比较,如果在范围里面,则判断为是红蓝黄,如果是,则写入数组中,即,最终获得的是数组,如果需同时显示三色,则将三个数组相加即可,最后再保留所需颜色即可。

#颜色转换其实是数学运算,如灰度化最常用的是:gray=R0.299+G0.587+B*0.114

阈值分割(像素点值大于某一阈值转换为一类,小于则另一类)

  1. ret, th = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY) #参数1:要处理的原图,一般是灰度图 参数2:设定的阈值 参数3:最大阈值,一般为255 参数4:阈值的方式,主要有5种,详情:ThresholdTypes
  2. 自适应阈值(对于阴暗分布不均匀的图片):

    cv2.adaptiveThreshold( img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 11, 4)
    ‘’’
    参数1:要处理的原图
    参数2:最大阈值,一般为255
    参数3:小区域阈值的计算方式
    o ADAPTIVE_THRESH_MEAN_C:小区域内取均值
    o ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核
    参数4:阈值方式(跟前面讲的那5种相同)
    参数5:小区域的面积,如11就是11*11的小块 #越大越精细 效率?
    参数6:最终阈值等于小区域计算出的阈值再减去此值 #试验:为0时会很多小点,为个位数时能去除黑点,过大清除图片(全白)
    ‘’’

#在前面固定阈值中,我们是随便选了一个阈值如127,那如何知道我们选的这个阈值效果好不好呢?答案是:不断尝试,所以这种方法在很多文献中都被称为经验阈值。Otsu阈值法就提供了一种自动高效的二值化方法,不过我们直方图还没学,这里暂时略过。

图形几何变换

缩放就是调整图片的大小,使用cv2.resize()函数实现缩放。可以按照比例缩放,也可以按照指定的大小缩放:
import cv2
img = cv2.imread(‘drawing.jpg’)

按照指定的宽度、高度缩放图片

res = cv2.resize(img, (132, 150))

按照比例缩放,如x,y轴均放大一倍

res2 = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
cv2.imshow(‘shrink’, res), cv2.imshow(‘zoom’, res2)
cv2.waitKey(0)
我们也可以指定缩放方法interpolation,更专业点叫插值方法,默认是INTER_LINEAR,

OpenCV_basis相关推荐

最新文章

  1. 公告:Rover's Official Blog停止更新
  2. 小学数学开灯问题_包含数学暑假答案的一年级数学假期作业题
  3. Github1.3万星,迅猛发展的JAX对比TensorFlow、PyTorch
  4. 单体内置对象_单体内置对象
  5. ELK根据服务类型收集多个容器数据
  6. 【M10】在构造方法内阻止资源泄漏
  7. 【MFC开发(12)】图片框控件 Picture Control
  8. 量子笔记:量子计算祛魅
  9. 在3ds max中,什么是PBR材质?
  10. python算法1.5百钱百鸡
  11. Container With Most Water-水桶装水问题
  12. python定向爬虫_Python-定向爬虫的简单使用
  13. RT-Thread编程手册
  14. OSChina 周二乱弹 ——爸爸陆陆续续回家了
  15. Linux 文件系统结构
  16. LINQ之路 6:延迟执行(转载)
  17. 经验分享:如何零基础开始自学Python编程(上)
  18. 网站添加 工信部备案 链接
  19. 微软官方中英文Office2010SP1直接下载地址
  20. RPG语言关键字的含义

热门文章

  1. HTML基础之创建简单表格
  2. 怎么通过Unity使用Vulkan API 移动端Vulkan GPU 大PK
  3. chinacache解决方案——静态内容加速
  4. [实践篇]13.12 教你读懂QNX座舱方案里的高频术语
  5. Visual Studio 2019 下Python的开发环境搭建
  6. 怎么使用漫画脸制作软件
  7. 从零开始开发微信小程序(四):微信小程序绑定系统账号并授权登录之后台端...
  8. 【UE】BUILD ERROR: Missing precompiled manifest for ‘****‘.
  9. 【分享】PPT--你不知道的使用技巧
  10. 如何用手机控制电脑或电脑控制手机?