Image 打印YUV图像的像素值

Image 打印YUV图像的像素值,image,opencv,yuv,Image,Opencv,Yuv,当我将图像从RGB转换为YUV时,当我尝试打印像素时,无法获得Y值。我得到一个值377,当我用整数转换它时,我得到255。我认为这是不正确的。是否有更好的方法或更正确的方法来打印YUV图像像素的值 实际上,我是在计算值(int)src.at(j,i).val[0]=255 和src.at(j,i).val[0]=377 同样在注释中,Y是根据注释计算的RGB与一些常数的组合。实际上,我对如何获得Y的值感到困惑。这是OpenCV的问题。OpenCV不能为uchar格式优雅地处理(缩放)YUV或HS

当我将图像从
RGB
转换为
YUV
时,当我尝试打印像素时,无法获得Y值。我得到一个值
377
,当我用整数转换它时,我得到255。我认为这是不正确的。是否有更好的方法或更正确的方法来打印YUV图像像素的值

实际上,我是在计算值
(int)src.at(j,i).val[0]=255
src.at(j,i).val[0]=377


同样在注释中,Y是根据注释计算的RGB与一些常数的组合。实际上,我对如何获得Y的值感到困惑。

这是OpenCV的问题。OpenCV不能为
uchar
格式优雅地处理(缩放)YUV或HSV颜色空间。使用
Vec3b
可以有效地实现3通道
uchar
,范围为[0;255]

解决方案是使用另一种矩阵类型。使用
cv::Mat3f
可以获得3通道浮点图像。然后,值将通过
cvtColor
功能正确转换。您可以通过赋值从Mat3b获得Mat3f


另一种使用更少内存的解决方案可能是Mat3s和Mat3w类型,如果cvtColor支持的话。

Ok我看到了OpenCV的问题。默认情况下,imread()应该是uchar。你的意思是我从uchar类型的Mat3f转换过来。是的,或者你只需要做Mat3f input=imread(…),它就可以工作了。但是,如果imread失败(例如错误的文件名),它将抛出异常。感谢您的帮助。还有一个问题,比如你建议我使用Mat3f直接读取图像。它可以工作,但当我打印图像时,它显示为全白色。然而,当我使用cvtColor时,它可以很好地显示对象。现在我的困惑是,当我读取Mat3f时,它是否从uchar转换为自动浮动。imshow假设范围[0;255]适用于uchar图像,但范围[0;1]适用于浮动图像。如果您想在阅读后立即显示图像,请致电imshow(image/255)。很抱歉打扰您,但您是否可以回答相同主题的问题?