imwrite and/or imread in python opencv 后的图像像素值

Image pixels values after imwrite and/or imread in python opencv

我正在尝试使用图像编辑器(例如 MS 画图或 paint.net)在图像上绘制具有固定颜色(例如 RGB = 255、0、0 的纯红色)的边界框,然后通过查找具有此 RGB 值(或 0、0、255 中的 BGR 值)的像素将图像加载到 python(例如 opencv imread)中,以便我可以创建用于对象检测目的的标签。

但是,在保存和加载图像后,我没有看到任何具有此类 RGB 或 BGR 值的像素。相反,这些像素在可能与我指定的值相去甚远的值范围内。

我也试过用这样的东西来做实验:

cv2.rectangle(img_arr, (10, 10), (60, 60), (0, 0, 255), thickness=1)

在此语句之后,我确实看到了值为 (0, 0, 255) 的像素。但是,当我 运行 cv2.imwrite 然后 cv2.imread 像这样时:

cv2.imwrite(full_path_name, img_arr)

及以后:

 img_arr = cv2.imread(full_path_name)

我注意到在这个新 img_arr 中,不再有任何具有这些 BGR 值的像素。有什么问题?

回到最初的对象检测标签图像问题,我不想使用任何标签工具,因为大多数工具都是检测鼠标运动,但是我对象检测的任务是检测文本区域,这需要非常精确的边界框,这样后期的图像分割和字符识别就不会太难。因此,我更喜欢静态的方式,这样边界框可以调整到准确,甚至可以被审查。当它们最终确定时,我们创建标签。这个想法能行得通吗?

非常感谢!

使用 JPEG 作为图像处理任务的中间存储时要小心,因为它是一种有损格式,当您随后读回它们时,值可能会有所不同。

考虑使用无损 PNG 格式进行中间存储。或使用 NetPBM PGM(灰度)或 PPM(彩色)格式来读取和写入特别简单的格式 - 但请注意它不能保留元数据,例如版权或 EXIF 数据。