2021-04-18

一、opencv简介

1.点击查看opencv源码文档

2.opencv要点

  1. opencv 底层采用c/c++实现,因此window窗口在python环境下也是可以设置的

二、函数目录

2.1 图片IO操作

2.1.1 cv2.imread: 图片读取

path = "your picture absolute path"
cv2.haveImageReader(path) # 用于检测 能被cv读取返回true
cv2.imread(path, cv2.IMREAD_COLOR) # 第二个参数是打开模式,灰度图是cv2.IMREAD_GRAYSCALE

2.1.2 cv2.imwrite: 图片写入

cv2.haveImageWriter(path + "t.gif") # 测试cv是否能写入该格式的图片
cv2.imwrite(w_path + ".bmp", img) # 保存为指定格式的图片

点击查看imwrite第三个参数的用法

2.1.3 cv2.imshow:图片显示

常用的 创建与设置窗口 方法:

window_name = “my_window” //定义窗口名称
cv2.namedWindow(my_window, cv2.WINDOW_NORMAL) //创建窗口,设置窗口初始参数
cv2.setWindowProperty(my_window, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN) //动态改变窗口参数
cv2.moveWindow(my_window, 0, 0) //设置窗口位置坐标
cv2.resizeWindow(my_window, 32, 32) //修改窗口尺寸
cv2.setWindowTitle(my_window, “new title”) //修改窗口标题

**详细参数可以在opencv源码中查到**
设置好窗口 之后就可以在 我们设置的窗口 显示图片啦!

cv2.imshow(my_window, img.jpg) # 窗口中显示图片
cv2.waitKey(0)	# 窗口停留时间ms, 0表示无穷大 必须设置

2.1.4 imencode: 图片压缩

??? 为什么要用numpy

  1. Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。
  2. Python虽然也提供了array模块,但其只支持一维数组,不支持多维数组(在TensorFlow里面偏向于矩阵理解),也没有各种运算函数。因而不适合数值运算。
    NumPy的出现弥补了这些不足。
press_img = cv2.imencode(".jpg", img)[1] # 返回(retval, buf) 分别是bool 和 矩阵,因此要加上[1]提取图像数据
press_img = numpy.array(press_img)
press_img = press_img.tostring()

//***存储于文件中***//
import pathlib
os.chdir("新的当前目录") 	# 改变当前目录
my_file = Path("test_chdir")
if not (my_file.exists()):
    os.mkdir(my_file) # 创建新目录
with open(Path(my_file) / "1.txt", 'wb+') as fp:
    fp.write(press_img)
    fp.close()

II. 图片操作

2.2.1 cvColor

void cv::cvtColor 	( 	
		InputArray  	src,	# 源图片
		OutputArray  	dst,	# 输出图片
		int  	code,			# 装换模式
		int  	dstCn = 0 		# 输出图片通道数,默认与input相同
	) 		
Python:
	dst	=	cv.cvtColor(src, code[, dst[, dstCn]])	# python中参数顺序有所不同

code参数详见opencv官网

搭建opencv3.4.15 + visual studio2019 + win10的编译环境:
这篇文章写得亲测有效,为大佬点赞
我尝试过用cmake搭建codeblock + mingw64的编译环境,搭建了整整一天,bug频出,后来查阅书籍知道,从官网下载的opencv有两个目录,其中build目录是官方编译好的,可以直接拿到vs上使用;sources的目录是源码,可以用它搭建其他编译环境。所以在用sources各种碰壁之后,我还是老老实实下载了vs2019,之后的方法上面的文章写得非常好,我就是用这个教程搭建好的

应用opencv的常见bug:

cv::VideoCapture cap(“D:\download\1.avi”);报错找不到文件的时候
仔细查看两点
1. 路径是否有问题
2. cv::videocapture只支持AVI和MPG格式的视频,如果导入MP4的话会报错,只需要用格式工厂转换一下就好了,不过要注意,avi格式的视频有很多种,从MP4转化到avi有多种编码方法,h264编码比xvid要兼容性高。这个可以在输出配置中改。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值