2

我正在分析我开发的代码,当我使用 cvSet2D 时,我发现我的代码存在瓶颈。是否有比 cvSet2D 更有效的替代方法?

我怎样才能写出这些像素?

4

2 回答 2

1

我建议您使用 C++ 函数而不是旧的 C 样式函数。

写入像素的最有效方法如下。

   cv::Mat frame;

   // load your img to your Mat

   uchar* p = frame.ptr(row); // returns a row pointer
   p[column] = x; // accesses value in the given column

需要注意的一点是,您的列数可能比像素列数多,例如,在 3 通道图像上,您可以访问的实际像素列数是 3 倍。

有关迭代像素的不同方法的更多信息,请查看教程。

于 2012-04-25T08:45:05.840 回答
0

您需要获取指向结构的数据字段的指针。

(C API) IplImage 结构有一个称为数据的 char* 字段。访问(your_type*)image->data第一个元素,然后像常规的 C 1D 数组一样使用它,但要小心使用字段 stepWidth 从一行跳转到下一行(因为数据行可能会以 16 位的倍数对齐以进行内存访问优化)。

(C++ API)T* cv::Mat::ptr<T>(int i)用于获取指向要访问的行的第一个元素的指针。然后用作常规 C++ 1D 数组。

这应该是更快的访问模式(有关不同访问模式的比较,请参阅 OpenCV2 Cookbook 一书)。

于 2012-04-25T08:46:33.233 回答