cv::MatIterator等效数字

2024-09-28 19:02:21 发布

您现在位置:Python中文网/ 问答频道 /正文

对于numpy中的RGB图像,cv::MatIterator的等价物是什么? 我读过numpy.nditer,但我不能准确地用它来表达我的需求。在

例如,考虑下面的C++代码,使用OpenCV迭代每个像素并分配RGB值:

cv::Mat rgbImage(someheight, somewidth, CV_8UC3);
cv::MatIterator_<cv::Vec3b> first = rgbImage.begin<cv::Vec3b>()
cv::MatIterator_<cv::Vec3b> last = rgbImage.end<cv::Vec3b>()

while (first!=last){
    *first = (get <cv::Vec3b> value from somewhere)
    ++first;
}

在上面的代码中,MatIteratorfirst用于在图像中的每个像素处直接分配cv::Vec3b类型的(R,G,B)值。在

考虑到下面的Python代码

^{pr2}$

有人能提供一个例子来说明一个等价的numpy版本是如何直接分配(R,G,B)值的元组吗? 谢谢!在


Tags: 代码图像numpyrgb像素opencvcvfirst
1条回答
网友
1楼 · 发布于 2024-09-28 19:02:21

迭代数组的一种简单方法是使用^{}和一个for循环,然后您可以修改其中的图像,下面是如何使用它的示例:

import numpy as np

# generate a random numpy array as loaded from cv2.imread()
img = np.random.randint(255, size=(8, 10, 3))

for (x,y,z), value in np.ndenumerate(img):
    do_something(img[x,y,z]) # modify to do whatever you want

记住OpenCV使用BGR而不是RGB。因此,如果您想将洋红颜色(BGR=(255,0255))指定给尺寸为3x4的黑色图像中的像素(x=1,y=2),请执行以下操作:

^{pr2}$

相关问题 更多 >