Mat B(A)只复制图像A的头和指针部分,要想使Mat对象的头部和数据部分一起复制,需要使用 Mat B=A.clone(), A.CopyTo(B);
#include<opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
using namespace cv;
int main()
{
Mat src=imread("aa.jpg");
if(!src.data)
{
std::cout<<"failed"<<std::endl;;
}
imshow("aa",src);
Mat dst=Mat(src.size(),src.type());
dst=Scalar(127,0,266);
imshow("dst",dst);
Mat dst1=src.clone();
imshow("dst1",dst1);
Mat dst2;
src.copyTo(dst2);
imshow("dst2",dst2);
Mat grey;
cvtColor(src,grey,CV_BGR2GRAY);
printf("src channels",src.channels());
printf("grey channels",grey.channels());
const uchar *FirstValue=grey.ptr<uchar>(0);
printf("grey first value :%d\n",*FirstValue);
imshow("grey",grey);
Mat M(3,3,CV_8SC3,Scalar(0,0,255));
std::cout<<M<<std::endl;
Mat M2=Mat::zeros(src.size(),src.type());
Mat M3=Mat::zeros(2,2,CV_8UC1);
imshow("M2",M2);
std::cout<<M3;
waitKey(0);
return 0;
}