图片像素对比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;
}

 

 

 

时间: 2024-08-03 22:37:44

图片像素对比OpenCV实现,实现人工分割跟算法分割图像结果的对比的相关文章

OpenCV进行图像相似度对比的几种办法

转载请注明出处:http://blog.csdn.net/wangyaninglm/article/details/43853435, 来自:shiter编写程序的艺术 对计算图像相似度的方法,本文做了如下总结,主要有三种办法: 1.PSNR峰值信噪比 PSNR(Peak Signal to Noise Ratio),一种全参考的图像质量评价指标. 简介:https://en.wikipedia.org/wiki/Peak_signal-to-noise_ratio PSNR是最普遍和使用最为广

获取图片像素颜色并转换为CSS 3 box-shadow显示

原理: 1.使用FileReader 读取图片 2.使用canvas 的 getImageData 获取图片像素信息 3.将像素信息转换为CSS3 box-shadow 代码: <!DOCTYPE HTML PUBLIC> <html> <head> <meta charset="utf-8"> <title>获取图片像素颜色,转换为css3 box-shadow</title> <style type=&q

win8系统使用自带画图工具修改图片像素和文件大小的具体方法

  win8系统使用自带画图工具修改图片像素和文件大小的具体方法          具体方法如下: 1.假设我们需要一张图片大小320*240,文件大小为50kb以下.但是我们拿到的图片明显是不符合要求的.这个时候可以用画图工具打开这张待处理图片; 2.选择工具栏中的"重新调整大小"; 3.选择"像素",并且去掉"保持纵横比"前面的勾; 4.将像素的水平和垂直数值分别填完320和240.点击保存.然后回到照片保存的文件夹,选中照片,鼠标右键-属性

图片像素低怎么办?用PS将低像素调整成高像素教程介绍

  有时候改变图片的像素大小会改变图片质量,把小图片改成大图片,质量也会跟着下降,那有没有什么方法可以实现把低像素图片变成高像素图片呢,以下这篇PS低像素变高像素教程相信会对大家很有帮助. 不得不说PS真是个强大的图片处理工具,我们都知道有时候改变图片的像素大小会改变图片质量,把小图片改成大图片,质量也会跟着下降,那有没有什么方法可以实现把低像素图片变成高像素图片呢,这是日常需要处理图片的朋友可能会经常接触到的麻烦,以下这篇是本编收集总结并实用验证才敢放出来跟大家一起分享,以解决大家的困扰. 首

JavaScript获取图片像素颜色并转换为box-shadow显示_javascript技巧

一.原理: 1.使用HTML5的FileReader API读取图片FileReader文件读物器,用于读取客户端文件到,注意,文件读取完毕后并不会载入缓存 eg: var upfile = document.querySelector('#upfile'); var fileReader = new FileReader(); fileReader.onload = function(evt) { if(FileReader.DONE==fileReader.readyState) { var

uiimage-UIImage旋转引起图片像素降低

问题描述 UIImage旋转引起图片像素降低 使用下面的代码旋转图片: CGFloat DegreesToRads(CGFloat degrees) { return degrees * M_PI / 180; } - (UIImage *)scaleAndRotateImage:(UIImage *)image forAngle: (double) angle { float radians=DegreesToRads(angle); // calculate the size of the

图片-分水岭算法分割之后的特征提取

问题描述 分水岭算法分割之后的特征提取 用分水岭算法把一张彩色图片分割成了这样,目标是检测出里面的猪,请问当下用什么特征提取比较好,我是新手请多指教~

源代码-彩色图片像素代码!!

问题描述 彩色图片像素代码!! 一个彩色图片如何能得到它的像素代码矩阵,写到程序中,我使用的是240×320个像素点显像的TFT LCD屏 解决方案 http://wenku.baidu.com/link?url=QRdAqHTlkdzuQJc1CjFEYm8yBQKZeIhedArI9tghqvyHUX57LcNMQ5m-5KpkTHpJYxXIQ9VUaRS8P6jcS_oB297TuLWbR4c1OAan9lv-pa3

Android利用BitMap获得图片像素数据的方法_Android

本文实例讲述了Android利用BitMap获得图片像素数据的方法.分享给大家供大家参考,具体如下: 网上看到的参考是: int[] pixels = new int[bit.getWidth()*bit.getHeight()];//保存所有的像素的数组,图片宽×高 bit.getPixels(pixels,0,bit.getWidth(),0,0,bit.getWidth(),bit.getHeight()); for(int i = 0; i < pixels.length; i++){