- 学习笔记00和01的问题:
- 出现两个交互窗口,一个灰色,一个是结果,如下图
- 解决:打开项目-属性-链接器-输入-附加依赖项,将配置opencv时添加的依赖项删除一个即可
- dst.size是错误的, size不是对象dst的属性,而是一个方法函数, dst.size(),同理dst.type();
- Mat
- Mat对象的使用(程序也有一些,此处不再列举)
- Mat构造函数
- Mat dst(2,2 CV_8UC3, Scalar(0,0,255));
- Scalar括号内的是2*2矩阵中每个元素的值,显然这里4个元素都是一样的,即(0,0,255)
- Mat dst(行,列, CV_8UC3,具体像素值);
- CV_8UC3
- 8:每个通道的一个像素占8位
- U:无符号
- C:char类型
- 3:3个通道,决定了Scalar()的参数数量
- Mat复制问题
- 部分复制:只复制Mat的头和指针部分,不复制数据部分
- Mat A = imread(B);
- Mat C(D);
- 完全复制
- Mat F = A.clone(); F依然随A改变
- Mat G; A.copyTo(G); AG互不干涉
- 定义小数组filter
- Mat filter = (Mat_<double>(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
- 得到前天学的kernel矩阵
- 另一种创建矩阵的用法
- Mat m=Mat::zeros(src.size(), src.type());
- Mat m = Mat::zeros(2,2, CV_8UC1);
/***Mat对象的基本使用方法***/
int main(int argc, char ** argv)
{
Mat src;
src = imread("地址");
if(!src.data)
{
cout<<"no data"<<endl;
return -1;
}
namedWindow("src_imgae", WINDOW_AUTOSIZE);
imshow("src_image", src);
Mat dst; //创建一个Mat对象
dst = Mat(src.size(), src.type()); //初始化一个Mat对象,和src的大小类型都一样
dst = Scalar(123,12,132); //赋值, Scalar标量,括号就是RGB的值
namedWindow("dst_image", WINDOW_AUTOSIZE);
imshow("dst_image", dst);
Mat dst_clone =src.clone(); //克隆图像会随着源图像改变而改变
Mat dst_copy; //复制的图像不会因为源图像的变化而变化
src.copyTo(dst_copy);
Mat dst_cvt;
cvtColor(src, dst_cvt, RGB2GRAY); //改变颜色空间
cout<<"src' channels: "<<endl;
cout<<"dst_cvt's channels: "<<endl;
const uchar* dst_cvt_firstRow = dst_cvt.ptr<uchar>(0);
cout<<"dst_cvt's firstRow: "<<*dst_cvt_firstRow<<endl;
int cols = dst.cols; //宽度
int rows = dst.rows; //高度
Mat dst_mat(2,2,CV_8UC3,Scalar(12,122,1));
waitKey(0);
return 0;
}