【C++ Opencv】创建与现有图像规格相同的图像、克隆现有图像、复制现有图像、图像的行列宽、图像的掩膜操作、创建零矩阵,创建对角线是1的矩阵
1.创建与现有图像规格相同的图像2.克隆现有图像3.复制现有图像4.图像的行列宽5.图像的掩膜操作6.创建零矩阵7.创建对角线是1的矩阵
·
1.读取图像
Mat src = imread("D:/image/test.jpg"); //读取图像
if (src.empty()) { //src为空,即读取图像失败
cout << "could not load image...." << endl;
return -1;
}
namedWindow("input", WINDOW_AUTOSIZE); //新建显示窗口(这步在opencv3中可以不写)
imshow("input", src);
2.创建与现有图像src大小及类型相同的空白图像
Mat dst;
dst=Mat(src.size(), src.type()); //创建空白图像
//src.size()是src的规格
//src.type()是src的图像类型(比如RGB)
dst = Scalar(127, 0, 255); //给图像填充颜色
namedWindow("output", WINDOW_AUTOSIZE);
imshow("output", dst);
3.克隆现有图像
Mat dst1;
dst1 = src.clone(); //克隆现在有的图像
namedWindow("output1", WINDOW_AUTOSIZE);
imshow("output1",dst1);
4.复制现有图像
Mat dst2;
src.copyTo(dst2); //复制现在有的图像
namedWindow("output2", WINDOW_AUTOSIZE);
imshow("output2", dst2);
copyTo和Clone的区别:
clone 是完全的深拷贝,在内存中申请新的空间
copyTo 也是深拷贝,但是否申请新的内存空间,取决于dst矩阵头中的大小信息是否与src一至,若一致则只深拷贝并不申请新的空间,否则先申请空间后再进行拷贝.
5.将图像转为灰度图像
Mat dst3;
cvtColor(src, dst3, COLOR_BGR2GRAY); //转化为灰度图像
//参数说明:源图像、目标图像、目标图像格式
printf("input image channels:%d\n", src.channels()); //打印通道数
printf("output image channels:%d\n", dst3.channels());
namedWindow("output3", WINDOW_AUTOSIZE);
imshow("output3", dst3);
6.得到图像的行数、列数以及第一个像素的灰度值指针
int cols = dst3.cols; //得到行宽度(列数)
int rows = dst3.rows; //得到列宽度(行数)
printf("the cols number of the imgae is:%d\n", cols);
printf("the rows number of the image is:%d\n", rows);
const uchar* firstRow = dst3.ptr<uchar>(0); //得到第一个像素的灰度值的指针
printf("first pixel value:%d\n", *firstRow);
7.生成 CV_8UC3类型的图像
Mat M(10, 10, CV_8UC3, Scalar(0, 0, 255));
//参数说明:1宽度 2高度 3数据类型 4颜色
//cout << "M="<<endl << M << endl;
imshow("image_M", M);
8.创建二维矩阵
Mat m1; //创建二维矩阵
m1.create(src.size(), src.type());
m1 = Scalar(0, 0, 255);
imshow("二维矩阵", m1);
9.对图像做掩膜操作
Mat dst4;
Mat kernel= (Mat_<double>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //定义一个掩膜矩阵
filter2D(src, dst4, -1, kernel);
namedWindow("filter2D", WINDOW_AUTOSIZE);
imshow("filter2D", dst4);
10.创建一个零矩阵
Mat m2 = Mat::zeros(src.size(), src.type()); //生成一个矩阵,元素的值全是0
imshow("zeros", m2);
11.生成一个对角线是1,其他均是0的矩阵
Mat m3 = Mat::eye(src.size(), src.type()); //生成一个矩阵,主对角线元素是1,其他都是0
imshow("eye", m3);
更多推荐

所有评论(0)