在OpenCV中,如果你想将一张尺寸为192x112的cv::Mat
按行截取成多个子图,每个子图的高度为16像素,你可以通过循环来实现。以下是一个示例代码,演示了如何进行这个操作:
#include <opencv2/opencv.hpp>
#include <vector>
#include <iostream>
int main() {
// 创建一个192x112的Mat(示例数据)
cv::Mat original = cv::Mat::zeros(192, 112, CV_8UC3); // 用黑色填充
// 子图的高度
int blockHeight = 16;
// 存储切割后的子图
std::vector<cv::Mat> subImages;
for (int i = 0; i < original.rows; i += blockHeight) {
// 计算每个子图的结束行
int endRow = std::min(i + blockHeight, original.rows);
// 截取子图
cv::Rect roi(0, i, original.cols, endRow - i);
cv::Mat subImage = original(roi);
// 将子图添加到数组中
subImages.push_back(subImage);
// 显示结果(可选)
std::cout << "Sub Image " << (i / blockHeight) << " Size: " << subImage.size() << std::endl;
}
return 0;
}
代码解析:
- 创建原始图像:这里我们用
cv::Mat::zeros
创建了一张192x112大小的黑色图像作为例子。 - 定义块高度:设置每个分块的高度为16。
- 循环截取:通过循环,从0开始,以步长为16进行迭代。使用
cv::Rect
来定义要截取的区域,并用该区域生成新的cv::Mat
对象。 - 存储和输出:将每个截取的小图存入一个向量中,可以根据需要进一步处理或显示。
这样,最终你将得到多个小于或等于16像素高的子图,最后一部分可能会小于16像素。如果还有其他问题,请随时提问!
内容由零声教学AI助手提供,问题来源于学员提问