gpt4 book ai didi

c++ - Vec3b 使用问题和获取 Mat 对象中某个点的 RGB 值

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:32 24 4
gpt4 key购买 nike

for (int row = 0; row < curf->rows; row++)
{
for (int col = 0; col < curf->cols; col++)
{
Vec3b pixcur = curf->at<cv::Vec3b>(row, col);
cout<<"Pixel values at current point"<<endl<<pixcur.val[0]<<endl<<pixcur.val[1]<<endl<<pixcur.val[2]<<endl; ###DEBUG STMT ###
Vec3b pixlast = curl->at<cv::Vec3b>(row, col);
if (abs(pixcur.val[0]-pixlast.val[0])>checkval ||
abs(pixcur.val[1]-pixlast.val[1])>checkval ||
abs(pixcur.val[2]-pixlast.val[2])>checkval)
{
numPixelsDiff++;
}
}
}

这里 curf 和 curl 是指向两个 Mat 对象的指针。我知道它们指向实际的垫子,因为 curf->rows 和 curf->cols 的值输出实际的整数。

但是我用### DEBUG STMT ### 标记的行的输出总是垃圾。 checkval 是一个在进入循环之前设置的变量。 vec3b vector 中的值不正确。

我也试过

for (int row = 0; row < curf->rows; row++)
{
for (int col = 0; col < curf->cols; col++)
{
Vec3b pixcur = curf->at<cv::Vec3b>(row, col);
cout<<"Pixel values at current point"<<endl<<pixcur[0]<<endl<<pixcur[1]<<endl<<pixcur[2]<<endl; ###DEBUG STMT ###
Vec3b pixlast = curl->at<cv::Vec3b>(row, col);
if (abs(pixcur[0] - pixlast[0]) > checkval ||
abs(pixcur[1] - pixlast[1]) > checkval ||
abs(pixcur[2] - pixlast[2]) > checkval)
{
numPixelsDiff++;
}
}
}

它再次只输出垃圾符号。

我是不是做错了什么。我应该检查其他东西吗?我是 opencv 的完全新手,所以我会很感激任何帮助。

最佳答案

  1. 避免指向 cv::Mat ,迟早你会破坏内部refcount这边走。用引用,还是敢抄(反正是浅抄)。

  2. 打印字节时,使用:cout << int(pixcur[0]) .你需要类型转换,或者 cout会看到 uchar , 并打印 ascii。 (或者只做 cout << pixcur; )

  3. 避免逐像素循环。几乎在任何情况下,都有一个内置函数可以更好、更快地完成工作,并且出错的机会更少。例如,有 absdiff()countNonZero() .

关于c++ - Vec3b 使用问题和获取 Mat 对象中某个点的 RGB 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25739297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com