我有一个非常基本的测试用例:
#include <opencv2/opencv.hpp>
int main(){
auto image = cv::imread("input.bmp");
cv::imwrite("output.bmp");
}
如您所见,它们看起来完全不同。这里发生了什么事?
我尝试使用
cv::imread("input.bmp", -1)
读取图像不变,但这没有帮助。
我尝试过使用其他 bmp 图像,有时它可以工作,但很奇怪。我还没弄清楚什么时候有效,什么时候无效。
编辑:链接到原始文件:https://drive.google.com/file/d/1mG3I-G0sS0qi3QBuvQQK9Oa9yPq1Uoif/view?usp=sharing
我能够通过使用 imagemagick 库读取和写入相同的图像来规避这个问题。我没有做任何事情,只是用 imagemagick 阅读和写作。然后我可以使用 opencv 读取和写入图像,而无需更改图像。不幸的是,这需要 200 毫秒,所以我宁愿有一个更好的解决方案,但目前它可以工作。