C++OpenCV中的快速索引
Fast indexing in C++ OpenCV
我对Python中的OpenCV非常熟悉。我最近切换到了C++版本,由于我太习惯了numpy
的数组,所以cv::Mat
索引一直存在问题。特别是,我正在努力寻找是否有一种更好的方法可以在不迭代的情况下对数组的受限区域进行操作。例如,假设我有一个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++中实现这一点?
最好的方法可能是使用感兴趣的区域。通过以下方式使用rect可以很容易地对cv-mat进行分区:
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。
我不知道这是否是最有效的方法,如果不是,那么有人会纠正我。
一种方法是将图像设置为逐行的值
for (int i = 0; i < image.rows-1; ++i)
{
image.row(i).setTo(Scalar(0,0,0));
}
或者,如果图像数据指针继续,则使用std::fill
if(image.isContinuous())
std::fill_n(image.data, (image.rows-1) * image.cols * image.elemSize(), 0);
相关文章:
- 数组索引的值没有增加
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 芬威克树(BIT).找到具有给定累积频率的最小索引,单位为 O(logN)
- C++OpenCV中的快速索引
- 在 openCV 矩阵中查找列最大值的索引和值
- 将RGB颜色图像转换为OpenCV C 中的索引颜色图像类型
- OPENCV视频关注设备索引 /设备编号
- 对整个垫子图像进行排序并在 OpenCV 中存储索引
- Opencv Mat的元素索引产生垃圾
- 在OpenCV中使用Mat时exc_bad_access,尽管看起来我的索引是正确的
- 如何在opencv中创建cv::matrix的向量,并将图像数据的子矩阵分配给向量的所有索引上的矩阵
- OpenCV C++:从存储在 int 向量的索引中为垫子类型数据创建列范围
- 如何索引和修改OpenCV矩阵
- OpenCV距离变换中的像素索引
- 在opencv中索引矩阵的最佳方式
- c++ /OpenCV -我怎么能得到我的图像后使用flann::索引?(转炉)
- OpenCV稀疏矩阵:如何在一行/列中获得非零元素的索引
- OpenCV OCL逻辑索引