opencv learning学习笔记
一、opencv简介
1.点击查看
:opencv源码文档
2.opencv要点
- 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) # 保存为指定格式的图片
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
- Python中提供了list容器,可以当作数组使用。但列表中的元素可以是任何对象,因此列表中保存的是对象的指针,这样一来,为了保存一个简单的列表[1,2,3]。就需要三个指针和三个整数对象。对于数值运算来说,这种结构显然不够高效。
- 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要兼容性高。这个可以在输出配置中改。