我有一个cv::Mat对象,

cv::Mat _a ...

...和一个cv::Scalar对象,
cv::Scalar _b ...

_b的值设置为_a中的一个像素(在位置(x,y)中)的正确(最佳)方法是什么?

请注意,对象_a可以具有1、2、3、4个通道,但是该代码在所有情况下均适用,即:
  • _a具有1个通道时,应在各自的位置
  • 中分配_b的第一个元素
  • _a具有2个通道时,_b的第一个元素应分配给第一个通道,而_b的第二个元素应分配给第二个通道,两者都在各自的位置
  • (....)
  • 最佳答案

    cv::Mat具有重载的 operator= ,它需要一个cv::Scalar。这具有您想要的确切行为。不幸的是,没有直接方法将Scalar分配给像素值。但是,您可以创建一个感兴趣的区域,在坐标(x, y)处包含单个像素,并将Scalar分配给该像素:

    cv::Mat a; // contains data
    cv::Scalar b(1,2,3,4);
    
    cv::Range xr(x, x + 1);
    cv::Range yr(y, y + 1);
    a(xr, yr) = b;
    

    关于c++ - 将cv::Scalar的值设置为opencv中cv::Mat中的像素的正确(最佳)方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24170557/

    10-13 09:29