ZBLOG

Opencv 将一张192*112的cv::Mat 按行一定16像素截成几个cv::Mat

在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;
}

代码解析:

  1. 创建原始图像:这里我们用cv::Mat::zeros创建了一张192x112大小的黑色图像作为例子。
  2. 定义块高度:设置每个分块的高度为16。
  3. 循环截取:通过循环,从0开始,以步长为16进行迭代。使用cv::Rect来定义要截取的区域,并用该区域生成新的cv::Mat对象。
  4. 存储和输出:将每个截取的小图存入一个向量中,可以根据需要进一步处理或显示。

这样,最终你将得到多个小于或等于16像素高的子图,最后一部分可能会小于16像素。如果还有其他问题,请随时提问!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=21664

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?