标签:clu ora 窗口 一个 dos cto array imshow imwrite
1、 Mat frame = imread("apple.jpg"); 读取图像
if( !frame.date )
return 0;
Mat image.create( frame.size( ),frame.type( ) );
image.setTo( cv::Scalar(0,0,0) );
Mat img_roi( Rect( 2,3,56,56 ) );
//image.row(0).setTo(255,255,255);
2、imwrite("apple.jpg",frame); 保存图像为.jpg格式
3、imshow("image",frame); 显示图像
4、resize(frame,frame_temp,Size(width,height)); 改变图像大小
5、 cvtColor(frame, grayframe, CV_BGR2GRAY); 变图像为灰度图,还有其它的如下:
CV_RGB2GRAY CV_GRAY2BGR
CV_GRAY2RGB CV_BGR2YCrCb CV_RGB2YCrCb CV_YCrCb2BGR CV_YCrCb2RGB CV_BGR2HSV CV_RGB2HSV
6、 创建一幅图像
Mat frame = Mat(Size(width,height), CV_8UC3); // CV_8UC1 CV_16UC3 CV_32SC1
或 Mat frame;
frame.create(Size(width,height), CV_8UC3);
8、Mat frame; Mat frame_temp; //直接赋值矩阵
frame_temp = frame; //只是创建了一个新的矩阵头,矩阵本身还是指向frame,frame变时,frame_temp也会变。
9、//深复制,完全复制
Mat frame; Mat frame_temp;
frame_temp = frame.clone( );
或 frame.copyTo(frame_temp);
浅复制:
Mat b;
Mat a = b;
Mat a = Mat( b,Rect(2,5,15,20) );
10、Mat frame; //提取某个像素的值
float value = frame.at(row,col);
或 char value = frame.at(row,col);
或 int value = frame.at(row,col);
彩色图像:
Vec3b value = frame.at(row,col);
Vec3i value = frame.at(row,col);
Vec3s value = frame.at(row,col);
11、Mat frame; //更改某个像素的值
frame.at(rows, cols) = 255; //注意如果char换成float或int都有可能会错,所以要先确定像素类型,若是8位的,只能用char,用int和float都会报错。
opencv c++ mat获取像素及像素赋值
灰度图像获取像素值:
for (int i = 0; i < image.cols; i++) { for (int j = 0; j < image.rows; j++) { uchar value = image.at(j,i); } }
彩色图像获取像素分量值:
for (int i = 0; i < image.cols; i++) { for (int j = 0; j < image.rows; j++) { Vec3b intensity = image.at(j, i); for(int k = 0; k < image.channels(); k++) { uchar col = intensity.val[k]; } } }
像素赋值 :
uchar pixValue; for (int i = 0; i < image.cols; i++) { for (int j = 0; j < image.rows; j++) { Vec3b &intensity = image.at(j, i); for(int k = 0; k < image.channels(); k++) { // calculate pixValue intensity.val[k] = pixValue; } } }
12、absdiff( frame, frame_temp, silh_ ); //矩阵相减
13、threshold( silh_, silh_, 30, 255, CV_THRESH_BINARY ); //矩阵二值化
14、namedWindow("image");//创建图像窗口
15、 Mat frame; IplImage* image;
Mat 转换为IplImage*: image = &(IplImage)frame;
IplImage* 转换为Mat: frame = image;
16、opencv读取视频:
VideoCapture cap(0); //VideoCapture cap("student.avi");
if(!cap.isOpened())
{return -1;}
cap>>frame;
if(frame.empty())
continue;
17、imshow("Tracker", frame);// Display
char key = (char)waitKey(1);
18、分出YUV三分量;
Mat img_yuv;
std::vector img_vec;
split(img_yuv , img_vec);
Mat Y_img = img_vec[0];
Mat U_img = img_vec[1];
Mat V_img = img_vec[2];
19、(图像掩码)把一幅图像的一块区域复制到另一幅图像的另一个区域
Mat image_1;
Rect rect_1 = Rect( 3,10,200,100 );
Mat image_2;
Rect rect_2 = Rect( 18,30,200,100 );
image_1(rect_1).copTo( image_2(rect_2) );
20、变换矩阵的行和列
Mat Mat::reshap(int cn,int rows ) const
参数cn:新的通道数;如果cn值为0表示变换前后通道数不变
参数rows:新的行数;如果rows值为0表示变换后矩阵的行数不变
例: Mat m = cv::Mat::zeros( 2, 2, CV_8UC1 );
Mat m_t = reshap( 0, 4 );
Opencv显示创建Mat对象的七种方式
方式一
#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { //创建一个2*2 类型为8位的uchar类型三通道的 颜色为黄色 Mat img(2, 2, CV_8UC3, Scalar(0, 255, 255)); cout << "矩阵元素" << endl << img << endl; /*Mat srcImage = imread("G:\\group.jpg"); cout << "图片矩阵" << endl << srcImage << endl;*/ return 0; }
方式二:
创建三维的矩阵
//创建一个超过二维的矩阵 #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { int sz[3] = { 2, 2, 2 }; //3维的 为2*2*2的 元素全部为0 Mat array2(3, sz, CV_8UC1, Scalar(0)); //因为是三维的,所以不能用DOS界面显示 return 0; }
方式三:
为已经存在的IplImage指针创建一个信息头
//为已经存在的IplImage指针创建一个信息头 #include<opencv2/opencv.hpp> using namespace cv; int main() { IplImage *img = cvLoadImage("G:\\group.jpg", 1); Mat srcImage(img); imshow("【测试代码】", srcImage); waitKey(0); return 0; }
方式四:
用Create函数实现对Mat的初始化
//用Create函数实现对Mat的初始化 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using namespace std; int main() { Mat img; img.create(4, 4, CV_8UC(2)); cout << "M = " << endl << img << endl; return 0; }
方式七:
为已存在的对象创建新信息头
//为已存在的对象创建新信息头 #include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main() { Mat srcImage(3, 3, CV_8UC3, Scalar(0, 0, 255)); Mat copyImage; srcImage.copyTo(copyImage); Mat newImage = srcImage.row(1).clone(); cout << "运行结果" << endl << newImage << endl; return 0; }
标签:clu ora 窗口 一个 dos cto array imshow imwrite
原文地址:http://www.cnblogs.com/dongvdong/p/7602928.html