图片对比,计算不同像素个数,已经比率。实现人工分割跟算法分割图像结果的对比,但是只能用灰度图像作为输入
// imageMaskComparison.cpp : 定义控制台应用程序的入口点。 // // imageMaskComparison.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <iostream> using namespace std; using namespace cv; int main() { String image_name,image1,image2; cout<<"input Parameters:"<<endl; cout<<"image name 1 : "; cin>>image1; cout<<"image name 2 : "; cin>>image2; Mat img1 = imread((char *)image1.c_str(), CV_LOAD_IMAGE_GRAYSCALE); Mat img2 = imread((char *)image2.c_str(), CV_LOAD_IMAGE_GRAYSCALE);//两幅图像的大小需要一致 imshow("img1",img1); imshow("img2",img2); Mat img_result1 , img_result2 , img_result ; img_result1.create(img1.rows,img1.cols,CV_8UC1); img_result1 = 255; img_result2.create(2,img1.size,CV_8UC1); img_result2 = 255; img_result.create(img2.rows,img2.cols,CV_8UC1); img_result = 0; //subtract(img1,img2, img_result1); //subtract(img2,img1, img_result2); //add(img_result1, img_result2, img_result1); absdiff(img1,img2,img_result); int init_index = 0; /* for(int i=0; i<img_result.rows; i++) { for(int j=0; j<img_result.cols; j++) { if (img_result.at<uchar>(i,j)== 255) { init_index++; } } } */ int count = 0; for(int i=0; i<img1.rows; i++) { for(int j=0; j<img1.cols; j++) { if ( img1.at<uchar>(i,j) == img2.at<uchar>(i,j)) { img_result.at<uchar>(i,j) = (uchar)255; } else { count++; img_result.at<uchar>(i,j) = (uchar)0; } } } int sum = img1.cols*img1.rows; double error_ratio = count/(double)sum; //cout<<init_index<<endl; cout<<"number of different pixel:"<<count<<endl; cout<<"error ratio: "<<error_ratio<<endl; imwrite("result.bmp",img_result); //imshow("result1", img_result1); //imshow("result2", img_result2); namedWindow( "result", CV_WINDOW_AUTOSIZE ); imshow("result", img_result); waitKey(); return 0; }