~ 开始使用OpenCV了 ~
今天尝试的是 容器 Mat 的小部分操作
内容来自于
https://www.bilibili.com/video/av17748771/?from=search&seid=3213762283999816753#page=4
视频中的src,dst的用法,感觉是
src = source 源 dst = destination 目的 可以看清楚数据传送的方向构造一个 Mat
比如现在打开了一张图片 test1.png
Mat src = imread("/Users/Aphas1a/Documents/C/OpenCV/opencvtest/test1.png"); if (src.empty()) { cout << "could not load...\n"; return 1; }
构造一个和 Mat src 一样的 Mat 的方法。注释掉的是达到一样目的的操作
dst = Mat(src.rows, src.cols, src.type()); //dst = Mat(src.size(),src.type()); //dst = src.clone(); //src.copyTo(dst);把彩图转灰度图
cvtColor(src, dst, COLOR_BGR2GRAY);
- 最新几个版本的OpenCV已改为COLOR_BGR2GRAY类似形式,视频里是CV_BGR2GRAY
- 因为OpenCV的颜色空间以 BGR 为主,在这里用COLOR_RGB2GRAY时如果用imshow()显示图片似乎没什么关系,但不知道其他地方混用会怎么样 0. o
cv::Mat::Mat()
举一个应用的例子:
建立一个【100 × 100】像素的,【每通道8位 无符号 char型 3通道】的, 每个像素初始化颜色为红色的(OpenCV的颜色空间以 BGR 为主)的 Mat PS. 向量长度和通道数要一致cv::Mat::Mat(100, 100, CV_8UC3, Scalar(0,0,255));还有2个函数不知道怎么归类乱放在这吧
cv::Mat::zeros() // 类似matlab生成0矩阵cv::Mat::eye() // 类似matlab生成单位矩阵Mat对象使用的要点
- 使用了OpenCV的c++接口,不用考虑内存分配问题
- 赋值操作和拷贝构造函数只会复制 头部分
- 使用clone和copyTo两个函数会 完全复制