请使用C++和OpenCV写一段程序,实现比较两张png图片的相似度
时间: 2024-05-13 17:21:13 浏览: 91
我知道您的要求,请放心,我可以为您实现。以下是演示代码:
```
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
int main(int argc, char** argv) {
if (argc != 3) {
std::cout << "Usage: " << argv[0] << " image1.png image2.png" << std::endl;
return -1;
}
Mat img1 = imread(argv[1], IMREAD_GRAYSCALE);
Mat img2 = imread(argv[2], IMREAD_GRAYSCALE);
if (img1.empty() || img2.empty()) {
std::cout << "Could not open or find the images!" << std::endl;
return -2;
}
if (img1.size != img2.size) {
std::cout << "The two images should have the same size!" << std::endl;
return -3;
}
Mat diff;
absdiff(img1, img2, diff);
double nonZero = countNonZero(diff);
double similarity = (1.0 - nonZero/(double)(img1.rows*img1.cols)) * 100.0;
std::cout << "Similarity between the two images: " << similarity << "%" << std::endl;
return 0;
}
```
这个程序使用了 OpenCV 库和 C++ 语言来比较两张 PNG 图片的相似度。您可以将两张 PNG 图片的文件名作为程序的命令行参数传递给它。程序首先读取并加载这两张图片,并检查它们的大小是否一致。然后它计算这两张图片的差异,并计算出两张图片之间的相似度。最后,程序输出这两张图片的相似度结果(以百分比表示)。
阅读全文