zoukankan      html  css  js  c++  java
  • 图片像素对比OpenCV实现,实现人工分割跟算法分割图像结果的对比

    图片对比,计算不同像素个数,已经比率。实现人工分割跟算法分割图像结果的对比,但是只能用灰度图像作为输入

    // 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;
    }


     

  • 相关阅读:
    pandas分组聚合基本操作
    微信开发系列----01:成为开发者
    未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。
    ADO.NET基础巩固-----连接类和非连接类
    ADO.NET封装的SqlHelper
    Jmeter + Grafana + InfluxDB 性能测试监控
    性能测试监控:Jmeter+Collectd+Influxdb+Grafana
    性能测试总结(一)---基础理论篇
    地铁模型分析性能测试
    JIRA问题状态已关闭,但是解决结果还是未解决
  • 原文地址:https://www.cnblogs.com/wangyaning/p/4236999.html
Copyright © 2011-2022 走看看