opencv学习-003-图像对象的拷贝、赋值和创建(.clone(),.copyTo(),Mat::zeros,Mat::ones)
- 1. 先来说代码里m1,m2,m3
- 1. 先来说代码里m4,m5,m6
- 3. 卷积核的创建
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main(int artc, char** argv) {
Mat src = imread("E:/Desktop/gray.png");if (src.empty()) {
printf("could not load image...\n");return -1;}namedWindow("input", WINDOW_AUTOSIZE);imshow("input", src);// 创建方法 - 克隆Mat m1 = src.clone();// 复制Mat m2;src.copyTo(m2);// 赋值法Mat m3 = src;// 创建空白图像Mat m4 = Mat::zeros(src.size(), src.type());Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);Mat m6 = Mat::ones(Size(512, 512), CV_8UC3);Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,-1, 5, -1,0, -1, 0);waitKey(0);return 0;
}
1. 先来说代码里m1,m2,m3
以上src是我们读取的数据,m1,m2是调用opencv中库函数.clone()和.copyTo()用来复制src图像,m3是一种简单的赋值,具体如下:
其中Mat的数据结构:
头部:图像的高宽,通道数,类型等等…
数据部分:像素数据,各个通道像素点的数据值是多少等等…是标量
1. 先来说代码里m4,m5,m6
m4,m5,m6都是创建出来的空白图像
Mat m4 = Mat::zeros(src.size(), src.type());
zeros方法内两参数第一个是对象的size,第二个是对象的数据类型,m4就是创建一个与src同大小,同数据类型的空白图像
Mat m5 = Mat::zeros(Size(512, 512), CV_8UC3);
m5就是创建一个512*512像素,数据类型为CV_8UC3
的空白图像
注:
CV_8UC3
:其实就是像素值的数据类型
一般的图像文件格式使用的是 Unsigned 8bits,CvMat矩阵对应的参数类型就是
CV_8UC1
,CV_8UC2
,CV_8UC3
。
(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3
)
而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1
,CV_32FC2
,CV_32FC3
…
double是64bits,对应CvMat数据结构参数:CV_64FC1
,CV_64FC2
,CV_64FC3
等。
3. 卷积核的创建
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0,-1, 5, -1,0, -1, 0);
此处为创建一个锐化算子,在这一节先写出来创建形式,后序再着重看