[opencv][cpp] 学习手册1:图像基础(信息、创建、剪切)
文章目录
1. 获取图像信息
- 图像尺寸: img.size() // 函数
- 图像行(高):img.rows // 属性
- 图像列(宽):img.cols // 属性
- 图像通道数:img.channels() // 函数
- 图像类型:img.type() // 函数
1. 代码
01_获取图像信息.cpp
//
// Created by jacob on 12/21/20.
//
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
string path = "../img/car.jpg";
Mat src = imread(path, IMREAD_GRAYSCALE);
// 获取图像的信息
cout << "size:" << src.size() << endl;
// 获取rows
cout << "获取行数:" << src.rows << endl;
cout << "获取列数:" << src.cols << endl;
cout << "获取通道数量:" << src.channels() << endl;
cout << "获取数据类型:" << src.type() << endl;
// 显示图像
imshow("src", src);
waitKey();
return 0;
}
2. 调试验证
3. 确定 OpenCV 矩阵元素的数据类型
2. 创建图像
1. 代码
02_创建图像.cpp
//
// Created by jacob on 12/21/20.
//
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
/**
* 创建一张图像
* CV_8UC3
*
* 8位 U无符号 C 通道数量 3
* */
Mat src = Mat::zeros(600, 400, CV_8UC3);
/*
* 在图像的正中间绘制一根红色的线
* at(row, col)
*/
for (int i = 0; i < src.cols; ++i) {
src.at<Vec3b>(300, i) = Vec3b(0, 0, 255);
}
imshow("src", src);
waitKey();
return 0;
}
2. 调试验证
3. 图像的剪切
1. 代码
03_图像的剪切.cpp
//
// Created by jacob on 12/21/20.
//
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat src = imread("../img/lena.jpg", IMREAD_COLOR);
// 定义要剪切的位置矩形
Rect rect(20, 30, 100, 250);
// 定义ROI
Mat dst = src(rect);
// 在ROI中间画一根线
for (int i = 0; i < dst.cols; ++i) {
dst.at<Vec3b>(dst.rows / 2, i) = Vec3b(0, 0, 255);
}
imshow("dst", dst);
imshow("src", src);
waitKey(0);
return 0;
}