
OpenCV (一)基于Python
发布日期:2021-05-04 20:59:04
浏览次数:14
分类:原创文章
本文共 2738 字,大约阅读时间需要 9 分钟。
文章目录
安装版本尽量选择 3.4.1 .15,因为3.4.2有一些功能已经申请了专利了。没办法免费用了。
一.安装opencv
pip install opencv-pythonpip install opencv-contib-python # 这个是相当于扩展包
二.图像的基本操作
2.1原理
0-255 表示像素点的亮度:,RGB 三个通道上的值,表示的是三个通道的亮度。灰度图是一个通道
如果一个彩色图像的大小是 500 *500 , 那么他就表示为 【500,500,3】
2.2读取和保存图片代码
import cv2 #读取bgr 的格式的图import matplotlib.pyplot as pltimport numpy as np#读取图像信息img=cv2.imread('./material/a.jpg')#可以打印出来瞧瞧,看是什么样的形状print(img)print(img.shape)# 输出结果是(300, 530, 3)# 表示的是 h w c ,只不过他不是 RGB,而是BGR# 展示图像信息cv2.imshow("自己指定的名字",img)cv2.waitKey(0) # 表示等待时间是由自己确定的# 已毫秒为单位cv2.destroyAllWindows() #按电脑上任意键消失#可以自定义一个方法,用来显示图片def cv_show(name,img): cv2.imshow(name,img) cv2.waitKey(0) cv2.destroyAllWindows()## 直接读取灰度图img=cv2.imread('./material/a.jpg',cv2.IMREAD_GRAYSCALE)print('**********')print(img.shape)cv2.imshow("自己指定的名字",img)cv2.waitKey(0)# 输出的结果(300, 530)# 保存图像cv2.imwrite('./material/test01.jpg',img)
三.视频的基本操作
1.原理
其实视频也是读进去的一张张的图片,对张图片进行处理,到最后的结果就是展示出来的,对整个视频的处理
2.视频读取和展示的代码
import cv2 #读取bgr 的格式的图import matplotlib.pyplot as pltimport numpy as np# cv2.VideoCapture 可以捕获摄像头,用数字来控制不同的设备。例如0.1.# 如果是 视频文件的话,直接指定好路径就好了# 读取视频vc=cv2.VideoCapture('./material/video/a.mp4')#检查是否打开正确if vc.isOpened(): open,frame=vc.read()# open是 bool 值,如果有就是true#frame 相当于就是读进来的一张图片else: open=False##读进来并且放出来while open: ret,frame=vc.read() if frame is None: #读到头了 break if ret==True: gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)# 转成黑白图 cv2.imshow('result',gray) if cv2.waitKey(10) & 0xFF==27: breakvc.release()cv2.destroyAllWindows()
四.其他基本操作
1.截图(感兴趣的区域)
# 截取图像,感兴趣区域img=cv2.imread('./material/image/b.jpg')print(img.shape)# 输出:(312, 500, 3)cat=img[0:200,0:380]cv_show('cat',cat)
效果图:就剩下原来的一半了:
2.边界填充
在特征提取的环节一般需要,比如是在一些卷积操作中。
import cv2import matplotlib.pyplot as pltimg=cv2.imread('./material/image/b.jpg')# 上下左右要填充的尺寸top_size,bottom_size,left_size,right_size=(500,500,50,50)# 填充,最后指定填充的方法replicate=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)# 行数、列数和索引值,plt.subplot(121),plt.imshow(img,'gray'),plt.title('ORIGINAL')plt.subplot(122),plt.imshow(replicate,'gray'),plt.title('REPLICATE')#展示出来plt.show()
效果图:
各种填充方法的区别:
最后使用参数填充的时候,要指定填充的值,一般是像素的值。
3.改变形状
1.代码
import cv2import matplotlib.pyplot as pltimg=cv2.imread('./material/image/b.jpg')# 查看形状print(img.shape)#(312,500,3)# 行数、列数和索引值,replicate=cv2.resize(img,(300,100))# 按照比例改变形状res1=cv2.resize(img,(0,0),fx=2,fy=4)res2=cv2.resize(img,(0,0),fx=4,fy=2)plt.subplot(221),plt.imshow(img,'gray'),plt.title('aa')plt.subplot(222),plt.imshow(replicate,'gray'),plt.title('REPLICATE')plt.subplot(223),plt.imshow(res1,'gray'),plt.title('REPLICATE')plt.subplot(224),plt.imshow(res2,'gray'),plt.title('REPLICATE')#展示出来plt.show()
效果图:
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月24日 09时25分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
P5854 【模板】笛卡尔树
2019-03-04
SpringMVC的基础配置之注解驱动
2019-03-04
在Ubuntu上安装GCC编译器
2019-03-04
Maven(高级)之聚合
2019-03-04
SecureCRT注册机
2019-03-04
菜鸟程序员,被无良HR欺骗,因祸得福,竟“意外”拿下美团offer
2019-03-04
吓我一跳?看了线程和线程池的对比,才知道池化技术到底有多牛
2019-03-04
给公司妹子讲了好久,头都大了,一个SQL语句是如何执行的?
2019-03-04
阿里大牛手撕SpringBoot,Cloud,Nginx与Docker,你凭什么搞不懂
2019-03-04
结局已定,一点不慌,秋招京东三面,给了意料之中的20KOffer。
2019-03-04
Java开发5年的我偶然被几条朋友圈打击,成功点燃,别说了,不去阿里对不起自己!
2019-03-04
凭借这份pdf,安卓顺利转行Java,成功4面拿下美团offer
2019-03-04
团体程序设计天梯赛-练习集 L1-006 连续因子 (20分)
2019-03-04
团体程序设计天梯赛-练习集 L2-007 家庭房产 (25分) 并查集思想+坑点分析
2019-03-04
暴打算法:王者级数据结构与LeetCode笔记,一路绿灯杀进字节Java岗
2019-03-04
团体程序设计天梯赛-练习集 L2-020 功夫传人 (25分) dfs深搜
2019-03-04
不愧是Alibaba技术官,随便甩出本kafka限量笔记,都火遍全网
2019-03-04
惊喜万分!全靠这份999页Java面试宝典,我刚拿到美团offer
2019-03-04
蘑菇街被裁,奋战7个月拿下字节跳动offer
2019-03-04
整合:2021年已收录GitHub的最新、最全、最实用的Java岗面试真题
2019-03-04