《OpenCV图像处理》 第一章 处理图像文件和视频文件

 

1、OpenCV(Open Source Computer Vision)

  • 最初由Intel 开发,第一版发布于2000年。第一次实现用的C语言,从2.0版本开始用C++。OpenCV 有支持JAVA、Python、MATLAB等语言的API,支持Linux、OS X、Windows、Android、iOS等操作系统。
  • 支持图片格式:bmp、dib;pbm、pgm、ppm;sr、ras。需要辅助库支持格式:jpeg、jpg、jpe;jp2;png;tif、tiff;webp。

2、Mat类

  • 是存储和操作OpenCV中图像的主要数据结构。这个类在core模块中定义。已实现自动分配和释放机制,但赋值运算符没有重载,需要用成员函数Mat::clone()。
  • 用于密集的n维单通道或多通道数组,可以用于存储 实数、复数或复数值向量和矩阵、彩色图像或灰度图像、直方图、点云(point cloud)等
  • 构造函数:Mat( nrows , ncols , type , fillValue )

3、示例代码

  • opencv.hpp 包含所有OpenCV头文件。
  • imread原型:Mat imread(const String& filename, int flags=IMREAD_COLOR)。
  • imread的flag有以下几种
enum{
    IMREAD_UCHANGED=-1,    //8位,彩色或非彩色,存储图像不会改变
    IMREAD_GRAYSCALE=0,    //8位,灰度
    IMREAD_COLOR=1,       //未改变深度、颜色
    IMREAD_ANYDEPTH=2,     //任意深度,未改变颜色
    IMREAD_ANYCOLOR=4,    //未改变深度,任意颜色
    IMREAD_LOAD_GDAL=8     //使用gdal驱动程序
}
  •  创建窗口函数原型:void nameWindow(const String& winname,int flag=WINDOW_AUTOSIZE);
  • nameWindow的flag有以下几种
enum{
    WINDOW_NORMAL=0x00000000,    //用户可调整窗口大小,还可以将一根全屏窗口切换为常规窗口
    WINDOW_AUTOSIZE=0x00000001,    //用户不能调整窗口大小,图像大小由显示图像所限制
    WINDOW_OPENGL=0x00001000,    //OpenGL支持的窗口
    WINDOW_FULLSCREEN=1,
    WINDOW_FREERATIO=0x00000100,    //图像可任意使用(调整时没有比例限制)
    WINDOW_KEEPRATIO=0x00000100,    //调整时保持缩放比例
}
  • imshow原型:void imshow(const String& winname,InputArray mat)
  • 如果在一个窗口上显示一个图像后不再做任何事情,我们看不到图像。所以需要循环执行一个任务的函数来保持显示。
  • int waitKey(int delay=0) 在delay时间(单位ms)内等待一个按键操作,并返回按键编码;如延迟结束没按键返回-1。如果delay是0或负数,函数会一直等待。(需至少创建和激活一个窗口,函数才会工作)
  • imwrite函数原型:bool imwirte(const String& filename , InputArray img , const vector<int>& params=vector<int>()) 第三个参数可选
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;

int main(int,char *argv[])
{
	Mat in_image, out_image;

	//读取原始图像
	in_image = imread("test.jpg", IMREAD_UNCHANGED);
	if (in_image.empty()) {
		cout << "Error!";
			return -1;
	}

	//创建两个具有图像名称的窗口
	namedWindow("Color", WINDOW_AUTOSIZE);
	namedWindow("Gray", WINDOW_AUTOSIZE);

	//在创建的窗口中显示原始图片
	imshow("Color", in_image);

	//转换为灰度图并显示
	cvtColor(in_image, out_image, COLOR_BGR2GRAY);
	imshow("Gray", out_image);
	
	//等待按键
	//cout << "Press any key to exit." << endl;
	waitKey();

	imwrite("out.jpg", in_image);

	return 0;
}

 4、用户交互

  • 用createTrackbar(const String& trackbarname,const String& winname, int* value,int count,TrackbarCallback onChange=0,void* userdata=0) 创建滑动条,链接整数值value、最大值count
  • 绘制一个矩形void rectangle(InputOutputArray img,Point pt1,Point pt2,const Scalar& color,int thickness=1,int lineType=LINE_8,int shift=0)

5、其他

  • 记得命名空间的声明,using namespace cv;

6、参考资料

     《OpenCV 图像处理》Gloria Bueno Garcia、Oscar Deniz Suarez、Jose Luis Espinosa Aranda著,刘冰 翻译,机械工业出版社出版,2016年11月

猜你喜欢

转载自blog.csdn.net/weixin_39731083/article/details/81204867