Mat对象:
生成同样大小的图片:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv) {
Mat src;
src = imread("E:\\2.5\\0.jpg");
if (src.empty()) {
cout << "could not image..." << endl;
return -1;
}
namedWindow("input",CV_WINDOW_AUTOSIZE);
imshow("input",src);
Mat dst;
dst = Mat(src.size(),src.type());
dst = Scalar(127, 0, 255);//白色则全255,黑色全0;
namedWindow("output",CV_WINDOW_AUTOSIZE);
imshow("output", dst);
waitKey(0);
return 0;
}
Mat dst = src.clone();//克隆
Mat dst;
src.copyTo(dst);//效果和clon();一样
RGB转换为灰度图:(并输出有几个通道)
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv) {
Mat src;
src = imread("E:\\2.5\\0.jpg");
if (src.empty()) {
cout << "could not image..." << endl;
return -1;
}
namedWindow("input",CV_WINDOW_AUTOSIZE);
imshow("input",src);
/*
Mat dst;
dst = Mat(src.size(),src.type());
dst = Scalar(127, 0, 255);//白色则全255,黑色全0;
namedWindow("output",CV_WINDOW_AUTOSIZE);
imshow("output", dst);
*/
//Mat dst = src.clone();
Mat dst;
//src.copyTo(dst);
namedWindow("output", CV_WINDOW_AUTOSIZE);
cvtColor(src, dst, CV_BGR2GRAY);
printf("input image channels:%d\n",src.channels());
printf("output image channels:%d\n",dst.channels());
imshow("output",dst);
waitKey(0);
return 0;
}
生成有意思的图片:
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main(int argc,char** argv) {
Mat src;
src = imread("E:\\2.5\\0.jpg");
if (src.empty()) {
cout << "could not image..." << endl;
return -1;
}
namedWindow("input",CV_WINDOW_AUTOSIZE);
imshow("input",src);
Mat dst;
dst = Mat(src.size(),src.type());
dst = Scalar(0, 0, 0);//白色则全255,黑色全0;
int thickness = 1;
int lineType = 8;
double angle = 0;
ellipse(dst, Point(200, 200), Size(120, 30), angle, 0, 360, Scalar(255, 0, 0), thickness, lineType);
double angle1 = 90; //椭圆旋转角度
//第三个参数Size中的两个参数分别是横轴长、纵轴长。
//同理,thickness若是小于0,表示实心
ellipse(dst, Point(200, 200), Size(120, 30), angle1, 0, 360, Scalar(255, 0, 0), thickness, lineType);
double angle2 = -45;
double angle3 = 45;
ellipse(dst, Point(200, 200), Size(120, 30), angle2, 0, 360, Scalar(255, 0, 0), thickness, lineType);
ellipse(dst, Point(200, 200), Size(120, 30), angle3, 0, 360, Scalar(255, 0, 0), thickness, lineType);
int thickness1 = -1;
ellipse(dst, Point(200, 200), Size(10, 10), angle3, 0, 360, Scalar(0, 0, 255), thickness1, lineType);
namedWindow("output",CV_WINDOW_AUTOSIZE);
imshow("output", dst);
//Mat dst = src.clone();
//Mat dst;
//src.copyTo(dst);
//namedWindow("output", CV_WINDOW_AUTOSIZE);
//cvtColor(src, dst, CV_BGR2GRAY);
//printf("input image channels:%d\n",src.channels());
//printf("output image channels:%d\n",dst.channels());
imshow("output",dst);
waitKey(0);
return 0;
}
获取图像按行的指针:
const uchar* firstRow = dst.ptr<uchar>(0);//第一行像素值
printf("first pixel value :%d\n",firstRow);
获取图像所有行和列的指针:
int cols = dst.cols;
int rows = dst.rows;
printf("row:%d cols:%d\n",rows,cols);//所有行和列
const uchar* firstRow = dst.ptr<uchar>(0);//第一行像素值
printf("first pixel value :%d\n",firstRow);
打印一个3*3的图:
Mat M(3, 3, CV_8UC3,Scalar(0,0,255));
cout << "M=" << endl << M << endl;
imshow("output",M);//打印出来
创建一张Mat图像:
Mat m1;
m1.create(src.size(), src.type());
m1 = Scalar(0, 0, 255);
imshow("output",m1);
创建小数组 (掩膜操作)
//定义小数组(掩膜,提高对比度)
Mat csrc;
Mat kernel = (Mat_<float>(3,3) <<0,-1,0,-1,5,-1,0,-1,0);
filter2D(src,csrc,-1,kernel);
imshow("output",csrc);