【发布时间】:2022-01-22 16:35:17
【问题描述】:
我正在用 C++ 编写这样的代码: 我希望有一个 100% 相同的 test1.jpg 副本图像。 不幸的是,我发现很多像素值在 cv::imwrite 之后发生了变化。
int main()
{
cv::Mat img1 = cv::imread("./test1.jpg");
cv::imwrite("test2.jpg", img1);
cv::Mat img2 = cv::imread("./test2.jpg");
int count = 0;
for (int i = 0; i < 250; i++) {
for (int j = 0; j < 250; j++) {
if (img1.at<uchar>(i, j) != img2.at<uchar>(i, j)) {
count++;
}
}
}
std::cout << count << std::endl;
return 0;
}
我在这个程序中使用 count 来查看这两个图像之间有多少差异, 虽然两张图片(test1.jpg 和 test2.jpg)的大小相同,均为 46kb,但计数值高达 16768!
有什么方法可以避免像素的变化吗?我只会在程序中使用 jpg 文件。 非常感谢!
【问题讨论】:
-
jpeg 有损。像素会改变。大小无关紧要。
-
那么png文件或其他类型的图片可以避免这个问题吗?
-
@Happy_Dunckey 是的,一个 .png 文件就可以了。我不明白为什么你被否决了,这是你刚开始时很容易犯的错误
标签: c++ opencv image-processing