【问题标题】:C++/opencv: how to delete specific path pixels in efficient wayC++/opencv:如何以有效的方式删除特定的路径像素
【发布时间】:2017-06-28 05:59:34
【问题描述】:

给定一个具有 4*4 元素的 Mat,如下所示: [1,2,3,4 5,6,7,8 9,10,11,12 13,14,15,16 ]

我想删除每一行的特定像素,这意味着删除 [0,0] [1,1] [2,0] [3,1] 位置元素,成为 [2,3,4 5,7,8 10,11,12 13,15,16 ] 注意:Mat 的大小发生了变化。
问题:有没有一种有效的方法来做这些操作?

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    我想唯一可行的选择是逐个像素地复制矩阵,同时忽略不需要的像素,因为它们分散在源矩阵周围的不同行和列中,因此没有单一的方法。

    std::vector<int> indices = { 0, 1, 0, 1 };
    cv::Mat dest_mat(source_mat.rows, source_mat.cols - 1, source_mat.type());
    int idx = 0;
    int dest_col = 0;
    for (int i = 0; i < source_mat.rows; ++i)
    {
        int* dest_row = dest_mat.ptr<int>(i);
        const int* source_row = source_mat.ptr<int>(i);
        dest_col = 0;
        for (int j = 0; j < source_mat.cols; ++j)
        {
            if (j != indices[idx])
            {
                dest_row[dest_col] = source_row[j];
                ++dest_col;
            }
            else
                ++idx;
        }
    }
    

    上面的代码假设每一行都包含一个不需要的像素,因为这就是我理解你的任务的方式。您可能需要调整 ptr&lt;&gt;() 以使其类型适合您实际使用的类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      • 2018-07-31
      • 1970-01-01
      相关资源
      最近更新 更多