我非常熟悉 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/