图像读取imread()
窗口创建namedWindow()
图像显示imshow()
图像保存imwrite()
资源释放destroyWindow()
坐标表示Point(x,y) Point pt; pt.x=20,pt.y=20;
Rect 类 成员有x,y,width,height。 Size()返回值Size表示大小,area()返回矩形面积,contains(Point)判断点是否在矩形内 Inside(Rect)判断矩形是否在该矩形内,tr()返回左上角坐标,br()返回右下角坐标
判断连个矩形是否相交 Rect rect =rect1 &rect2 , Rect rect = rect1 | rect2
Size表示区域的大小,常用构造函数Size(int _width, int _height)
Scalar()表示具有四个元素的数组,大量用来传递像素值,如RGB颜色,一般形式Scalar(double B, double G , double R , double Alpha),颜色顺序为BGR,最后一个是透明度
Mat类 (rows,cols,channels,data)data是指向数据块的指针
判断图像是否加载 if (! img.data) //图像数据为空 return; <=> if (img.empty())
Mat img1(100,200,CV_8UC1) <=> Mat img2(Size(200,100),CV_8UC1); 创建100行200列的图像,相当于200×100的图像,需要注意
图像的赋值与拷贝
赋值(共用一个内存空间,任意一个改变都会改变):Mat img = imread("0.jpg"); Mat img2(img); Mat img3 = img;
拷贝(原图像的副本): Mat img4 = img.clone(); Mat img5; img.copyTo(img5);
常用的颜色空间: COLOR_BGR2GRAY COLOR_BGR2LAB COLOR_BGR2HSV
彩色直方图均衡化,效果一般
Mat mat = imread("0.jpg");
Mat mergeImg;//合并后的图像
//用来存储各通道图片的向量
vector<Mat> splitBGR(mat.channels());
//分割通道,存储到splitBGR中
split(mat,splitBGR);
//对各个通道分别进行直方图均衡化
for(int i=0; i<mat.channels(); i++)
equalizeHist(splitBGR[i],splitBGR[i]);
//合并通道
merge(splitBGR,mergeImg);
Mat dstImg1;
bilateralFilter(src, dstImg1, 25, 200, 2.0);
获取视频
先定义一个VideoCapture cap("1.avi") ; 获取视频帧率Fps=cap.get(CV_CAP_PROP_FPS); (返回double类型) 格式化字符串sprintf ( strFps, "Fps:%1.0f/s", Fps);
在视频帧上输出文字putText(frame, strFps, Point(5,30), CV_FONT_HERSHEY_COMPLEX_SMALL,1,Scalar(0,255,0),1,8);
Esc跳出循环 if(27==waitKey(1000/Fps)) break;
int FrameCount = cap.get(CV_CAP_PROP_FRAME_COUNT);//获取总帧数