装载、显示、存储
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
//创建图像
Mat image;
cout<<"this image is "<<image.rows<<"*"<<image.cols<<endl;//image.channels()显示通道数,灰度单通道,彩色三通道
//导入图像
image=imread("f:\\1.bmp");//0--灰度,正数--彩色,负数--本身格式
if(image.empty())cout<<"load error"<<endl;
else cout<<"load success"<<endl;
cout<<"now this image is "<<image.rows<<"*"<<image.cols<<endl;
//简单处理-翻转并显示
Mat out;
flip(image,out,0);//正数水平翻转,0垂直,负数表示水平并垂直,flip(image,image,1)会就地处理
//显示
namedWindow("original image");
imshow("original image",image);
namedWindow("out image");
imshow("out image",out);
//保存结果
imwrite("f:\\12.jpg",out);
//system("pause");
waitKey(0);
return 0;
}
在图像上单击
在图像上绘图
图片的创建与复制
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
namedWindow("image");
Mat image1(240,320,CV_8U,100);//创建240*320的8位无符号单通道灰度图,初始灰度值全部设为100
image1.create(200,200,CV_8UC3);//重新分配一个图像200*200的8位无符号三通道彩色图
image1=200; //BGR设定,即B=200,显示蓝色
Mat image2(Size(320,240),CV_8UC3);//240*320
image2=Scalar(0,0,255); //BGR设定,全显示红色
Mat image3(320,240,CV_8UC3,Scalar(0,0,255)); //320*240 BGR设定,全显示红色
Mat image4=imread("f:\\1.jpg");
Mat image5(image4);//只复制头
image1=image4; //只复制头
image4.copyTo(image2);//真正复制
image3=image4.clone();//真正复制
waitKey(0);
return 0;
}
数据类型不同但是通道数相同的复制要用convertTo,即image4.convertTo(image2,CV_32F,1/255.0,0.0);后两个参数为缩放比例和偏移量roi区域
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;
int main()
{
namedWindow("image");
Mat logo=imread("f:\\logo.bmp");
Mat image=imread("f:\\1.bmp");
Mat imageRoi(image,Rect(image.cols-logo.cols,image.rows-logo.rows,logo.cols,logo.rows));
logo.copyTo(imageRoi);若改用掩码,即Mat mask(logo);logo.copyTo(imageRoi,mask);则对像素值为零(黑色)的位置不改变原值,即不被logo覆盖
imshow("image",image);
waitKey(0);
return 0;
}
或者imageRoi=image(Range(image.rows-logo.rows,image.rows),Range(image.cols-logo.cols,image.cols));
或者imageRoi=image.rowRange(start,end);
或者imageRoi=image.colRange(start,end);