opencv关于Mat对象常用操作

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);

图片

发布了32 篇原创文章 · 获赞 28 · 访问量 9727

猜你喜欢

转载自blog.csdn.net/visual_eagle/article/details/104183436