Opencv3编程入门学习笔记(一)

1.图像载入

a) IplImage* srcImage0 = cvLoadImage("lenna", 1);//程序退出前如果步release,会出现内存泄漏问题

b) Mat srcImage = imread("lenna.png", 1);//同样使读取图片,不存在release和内存泄漏问题

2.Opencv载入3通道彩色图像,解码后,是以BGR(蓝、绿、红)顺序存储,而不是RGB顺序。

3.图像显示

a) imshow("【原图】", srcImage);//仅仅显示图像

b) namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);//定制窗口,如添加滚动条、按钮等;另外,WINDOW_OPENGL(全写Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。关注destroyWindows()destroyAllWindows()两个释放内存的函数(大型程序)。

4. TrackBar(滑动条/轨迹条)Opencv以轨迹条代替有效按钮

a) 创建TrackBar并在window上显示的有效流程

i. namedWindow..-createTrackBar..-on_TrackBarint, void*

ii. On_TrackBar(int, void*)作用:执行计算add参数-addweighted..-imshow..

b) CV_EXPORTS_W int getTrackbarPos(const String& trackbarname, const String& winname);

获取当前TrackBar位置

5. 小结

a) OpenCV函数中输出图像的内存分配是自动完成的(除非特别指定);

b) 使用OpenCV C++接口时不需要考虑内存释放问题,但使用C接口时必须要手动释放内存;

c) C++接口赋值运算符和拷贝只复制信息头,简言之使复制的指向矩阵信息的指针,不会复制矩阵信息,非常省时,这也是C++接口极大优势之一;

d) 使用函数clone()或者copyTo复制的是一幅图像的全部矩阵信息,这是非常耗时的,因而在项目中要尽量避免使用他们。

e) 做数字图像处理,本质上就是做矩阵变换控制。

6.颜色系统总结

a) RGB 最常见,是人眼和显示设备的工作机制

b) HSV和HLS把颜色分解为调色、饱和度和明亮度。是描述颜色更为自然的方式。

c) YCrCb在JPEG图像格式中广泛使用

d) CIE L*a*b是一种在感知上均匀的颜色空间,适合用来度量两个颜色之间的距离。

 

你可能感兴趣的:(Opencv)