python - C++ OpenCV 中的快速索引

标签 python c++ opencv matrix-indexing

我非常熟悉 Python 中的 OpenCV。我最近切换到 C++ 版本,并且我一直在使用 cv::Mat 索引时遇到问题,因为我太习惯了 numpy 的数组。 特别是,我试图找出是否有更好的方法可以在不遍历数组的情况下对数组的限制区域进行操作。 例如,假设我有一个 10x15 酉矩阵,我想将除最后一行以外的所有内容都置为零(或另一个随机数);在 Python 中,我会做这样的事情:

import numpy as np

a = np.ones([10,15])
a[:-1,:-1] = 0

如何在定义了 cv::Mat a = cv::Mat::ones(10, 15, CV_32FC1); 的情况下在 C++ 中实现这一点?

最佳答案

最好的方法可能是使用感兴趣区域。可以通过以下方式使用矩形轻松地对 cv 垫进行分区:

using namespace cv;

Mat a = Mat::ones(10, 15, CV_32FC1);
Rect rect(2, 2, 4, 4);
Mat roi = a(rect);

您以后可以按照您喜欢的任何方式修改roi,通过以下方式放回a:

 roi.copyTo(a(rect));

您可以优雅地在上一行中使用新的 Rect,只要它的宽度和高度与原始 Rect 相同即可。要解决您的具体问题,最简单的方法是制作一个全为零的新矩阵,然后对那个矩阵使用 copyTo。

关于python - C++ OpenCV 中的快速索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401380/

相关文章:

python - 比较列中相同值的行并生成矩阵

python - Django HttpResponseRedirect,它返回 None 相反

C++ 和 SQLite - 如何执行由用户输入形成的查询?

c++ - OpenCV:SVM train_auto 断言 sv_count != 0 失败

c++ - Qt+OpenCV : Symbols not found for architecture x86_64

python - 元组中的元素到 Bag Pig 中的元组

python - 如何调用 `getattr()` 获取 Python MySQLCursor 方法?

c++ - sizeof 为我的结构提供了意想不到的结果

python - 在 OpenCV 中更改像素值后,图像沿对角轴反射

c++ - opencv:将 iplimage 转换为 mat 后出错