我是C ++的新手并且经常挣扎。我想做一个简单的程序来比较两个给定的.png /.jpeg图片,并将不同的像素打印成矩阵到控制台。
我想使用libpng或libjpeg库和stantard库。
所以例如:让我们说picture1只包含白色像素,并且有5x5像素。而picture2包含白色像素作为背景和大字母" T"黑色像素,有5x5像素。所以在控制台中打印的结果将是:
- 0 1 2 3 4
0 X X X X X
1 o o X o o
2 o o X o o
3 o o X o o
4 o o X o o
X
- 表示此位置上的像素不同,
o
- 表示此位置的像素相同
我的第一个想法是将两个文件加载到矩阵中,然后将它们比作picture1Matrix[ i ][ j ] == picture2Matrix[ i ][ j ]
。对我来说最大的问题是将图片加载到矩阵中。到目前为止,我能够打开流。
std::ifstream inputStreamFile1( fileName1, std::ios::binary );
if( !inputStreamFile1.is_open() || !inputStreamFile1.good() ) throw "Couldn't open first given file!";
另外我不知道是否以正确的方式打开它。
你会如此善良并用简单的例子帮助我如何完成这项具体任务?我正在寻找代码将小的.png / .jpeg文件加载到矩阵中,以便我可以进行比较
这是我的第一个问题,所以我为糟糕的问题形成以及我糟糕的英语道歉。
编辑:我也不知道选择哪种格式。 .jpeg或.png。我不知道使用图片格式的差异
答案 0 :(得分:0)
假设它们具有相同的尺寸,您可以使用英特尔的OpenCV库来执行这些操作。
鉴于您已安装了库,您可以非常轻松地执行此操作:
//read in the images
cv::Mat picture1= imread("image1.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat picture2= imread("image2.jpg", CV_LOAD_IMAGE_GRAYSCALE);
cv::Mat difference;
//compute the difference
cv::absdiff(picture1, picture2, difference);
difference
现在包含不同的像素。要查看它,请使用imshow("windowname", difference)
并将其打印到终端流
cout << "Difference = "<< endl << " " << Difference << endl << endl;