gpt4 book ai didi

c++ - opencv中的BMP不是无损的吗?

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

我正在使用 OpenCV C++ 测试 BMP 格式的灰度图像。

这是代码示例:

Mat img_cv = imread("test.jpg");
imwrite("aaa.bmp", img_cv);
Mat img_cv2 = imread("aaa.bmp")

由于 BMP 格式是无损的,img_cv 和 img_cv2 应该相同,但它们不是。这是输出样本,10x10 灰度图像;

img_cv:

41 41 41 64 64 64 47 47 47 42
29 29 29 36 36 36 60 60 60 57
68 68 68 52 52 52 61 61 61 228
42 42 42 33 33 33 160 160 160 229
47 47 47 68 68 68 128 128 128 171
38 38 38 50 50 50 97 97 97 70
67 67 67 67 67 67 66 66 66 104
104 104 104 105 105 105 99 99 99 95
95 95 95 115 115 115 115 115 115 113
74 74 74 74 74 74 90 90 90 115

img_cv2

41 64 47 42 55 76 197 177 54 62
29 36 60 57 200 248 246 240 160 51
68 52 61 228 248 247 248 242 158 48
42 33 160 229 237 240 244 194 62 43
47 68 128 171 96 113 77 74 66 55
38 50 97 70 98 64 88 69 71 40
67 67 66 104 87 102 98 76 56 57
104 105 99 95 92 107 85 87 60 51
95 115 115 113 109 103 112 99 57 63
74 74 90 115 119 113 124 92 51 47

那么我在处理 BMP 格式时是否做错了什么或遗漏了什么?

最佳答案

您只是误解了位图的二进制数据。源位图是每像素 24 位,而新位图是每像素 8 位。请注意在源代码中,每个值如何重复三次。 (3 乘以 8 位字节 = 24 位)如果您只是将每组三个字节组合成一个字节,它就会匹配目标位图。您似乎还截断了您发布的源位图中二进制数据的 1/3。

所以这个翻译是无损的只有当来源确实是完全灰度的。如果 OpenCV 确实将其从 24bpp 隐式转换为 8bpp,那么它可能是无损操作。

关于c++ - opencv中的BMP不是无损的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25355767/

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