gpt4 book ai didi

ios opencv 将十六进制颜色转换为标量颜色 -> 只得到黑色

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

我正在按照一些说明将多段线绘制到图像中(使用 opencv),但我不知道为什么在从十六进制颜色转换为标量颜色时我只得到黑色。这是我的代码:

 //convert hex to rgb
const char *cStr = [obj.backColor cStringUsingEncoding:NSASCIIStringEncoding]; //FF0000
long x = strtol(cStr+1, NULL, 16);
unsigned char r, g, b;
b = x & 0xFF;
g = (x >> 8) & 0xFF;
r = (x >> 16) & 0xFF;
cv::polylines(mat, v, true, cv::Scalar((int)(r/255.0), (int)(g/255.0), (int)(b/255.0), 255), 4);

我调试然后得到:

x   long    16711680
r unsigned char '\xff'
g unsigned char '\0'
b unsigned char '\0'

有人能告诉我原因吗?谢谢。

最佳答案

您的问题出在这一行:

cv::polylines(mat, v, true, cv::Scalar((int)(r/255.0), (int)(g/255.0), (int)(b/255.0), 255), 4);

它总是黑色的,因为r gb 已经是0-255的数字(你之前做了&FF),如果你除以 255,它会在 0 和 1 之间,然后你将它转换为 int,这在大多数情况下会给你 0,它是黑色的。


如果 mat 是 CV_8UC4 类型,那么可以这样做:

cv::polylines(mat, v, true, cv::Scalar(r, g, b, 255), 4);

如果 mat 是 CV_32F 类型,那么可以使用 0-1 之间的值

cv::polylines(mat, v, true, cv::Scalar((r/255.0), (g/255.0), (b/255.0), 255), 4); 

既然你说你是 OpenCV 的初学者,那么请注意颜色空间。 OpenCV 通常在大多数函数(imshow、imwrite 等)中使用 BGR(A),但这里的标量是 RGBA。因此,请确保它在相同的色彩空间中。这是为了以防万一它没有画出预期的红线,而是画了一条蓝线。

关于ios opencv 将十六进制颜色转换为标量颜色 -> 只得到黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54105612/

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