精华内容
下载资源
问答
  • 图片对比

    2019-09-25 10:25:08
    from PIL import Imageimport mathimport operatorfrom functools import reducedef compare(pic1,pic2): ''' :param pic1: 图片1路径 :param pic2: 图片2路径 :return: 返回对比的结果 ''' image1 = Image....
    from PIL import Image
    import math
    import operator
    from functools import reduce
    def compare(pic1,pic2):
    '''
    :param pic1: 图片1路径
    :param pic2: 图片2路径
    :return: 返回对比的结果
    '''
    image1 = Image.open(pic1)
    image2 = Image.open(pic2)

    histogram1 = image1.histogram()
    histogram2 = image2.histogram()

    differ = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2,histogram1, histogram2)))/len(histogram1))

    print(differ)
    return differ

    compare('D:/1.png','D:/1.png')

    转载于:https://www.cnblogs.com/Be-your-own-hero/p/11367860.html

    展开全文
  • 图片对比源码

    2011-11-29 08:30:16
    图片对比
  • 该软件功能包括文件对比,文件夹对比,图片对比,MP3对比等,不同部分会用不同颜色标记,功能强大,使用简单
  • 易语言图片对比源码

    2020-07-16 03:14:27
    易语言图片对比源码,图片对比,子程序1
  • android图片对比

    2017-01-18 15:40:19
    花了两天做的一个图片对比Demo,现在很多android的都是直接流对比,自己写了一个是二维数组的对比,可以不管图片是否相同大小,还是其中一部分等等,缺少一个图片如果是旋转后的对比功能。对比图片是先把图片转成...
  • 图片对比工具

    2013-04-01 10:49:04
    图片对比工具
  • twentytwenty - 图片对比插件
  • 易语言图片对比找茬源码,图片对比找茬,进程名取窗口句柄,EnumThreadWndProc,修改背景,移入事件,移出事件,CreateToolhelp32Snapshot,Process32First,Thread32First,EnumThreadWindows,Thread32Next,CloseHandle,...
  • 这是一款jQuery选择图片对比代码,支持将图片拖动、放大缩小、顺时针逆时针旋转、取消选择等功能。
  • 图片对比代码

    2011-09-19 11:09:39
    图片对比代码,1.比较两幅图片是否一致(使用Bitmap.GetPixel方式) 2.比较两幅图片是否一致(使用memcmp方式) 3.比较两幅图片是否一致(使用Marshal.ReadByte方式)
  • 逍遥图片对比系统

    2013-02-03 23:19:42
    逍遥图片对比系统
  • 图片对比软件diffimg

    2013-11-27 12:12:50
    图片对比软件diffimg 简体中文。可以作简图图像对比
  • Python 图片对比

    2019-10-22 18:02:51
    ImageCompare.py 图片对比 by 郑瑞国 ''' from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_location): diff = ImageChops.difference(Image.open(path_one)....
    '''
    ImageCompare.py 图片对比 by 郑瑞国
    '''
    from PIL import Image
    from PIL import ImageChops
    
    def compare_images(path_one, path_two, diff_save_location):
        diff = ImageChops.difference(Image.open(path_one), Image.open(path_two))
        if diff.getbbox():
            diff.save(diff_save_location)
            print(path_one,path_two)
        else:
            print(path_one,path_two,'      We are the same!')
     
    if __name__ == '__main__':
        import os
        compare_files = os.listdir('./image')
        for file in compare_files:
            print(file)
        image_file = input('input image file name:')
        for compare_file in compare_files:
            compare_images('./image/'+image_file,
                           './image/'+compare_file,
                           './image/'+compare_file+'diff.png')

     

    展开全文
  • 主要介绍了Python Pillow实现图片对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • js滑块拖动图片对比效果代码 js滑块拖动图片对比效果代码
  • jQuery实现图片对比特效,可用于进行图片的比对功能,用于显示左右两侧图片经过处理前和处理后的效果对比,鼠标可拖动中间的分隔线左右变换区域大小的功能。
  • C#图片对比高速找图源码20131021.rar C#图片对比高速找图源码20131021.rar C#图片对比高速找图源码20131021.rar
  • 图片比较 golang图片对比计算预设位置 主要是通过对比两张图片的rgb值,来找到错误值不同的地方,可以使用一些图片滑动验证码的校正
  • 主要介绍了使用Python的PIL模块来进行图片对比的方法,搜索引擎最基本的图片搜索也是利用图片颜色值的对比来实现的,需要的朋友可以参考下
  • 主要给大家介绍了关于java图片对比度调整的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • C#图片对比高速找图源码
  • Covering-Bad演示5种图片对比效果
  • c# 图片对比 按照百分比进行比对,想学习的可以下载试一下,后续还需有优化的可以直接留言我进行修改
  • CDPGesture验证 图像手势验证码,拍摄源图片,随机位置剪出一张图片,拖动图片然后与源图片对比以验证位置正确。
  • 整形图片对比

    2013-12-16 14:32:53
    整形图片前后对比图,各个部位的整形前及后的对比
  • 图片对比度增强

    千次阅读 2015-12-29 12:05:24
     本篇主要讲解利用直方图均衡化和使用模糊集合灰度变换方式来优化图片对比度,并直观显示出这两种方式下的优化效果,和优化后图片的 直方图分布情况。 直方图显示  开始讲图片对比度优化之前,需要先了解如何...

    简介

      本篇主要讲解利用直方图均衡化和使用模糊集合灰度变换方式来优化图片对比度,并直观显示出这两种方式下的优化效果,和优化后图片的
    直方图分布情况。
    

    直方图显示

      开始讲图片对比度优化之前,需要先了解如何直观显示出图片的直方图,该方式在本篇后续中常用到,所以提到最开始先讲。
    这里直接使用opencv实现,具体代码如下:
    

    具体代码

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv/cv.h>  
     
    using namespace cv;
     
    IplImage *DrawHistogram(CvHistogram *hist,float scaleX = 1,float scaleY = 1){
        float histMax = 0;
     
        cvGetMinMaxHistValue(hist,0,&histMax,0,0);
     
        IplImage *imgHist = cvCreateImage(cvSize(256*scaleX,64*scaleY),8,1);
     
        cvZero(imgHist);
     
        for(int i=0;i<255;i++){
            float histValue = cvQueryHistValue_1D(hist,i);
            float nextValue = cvQueryHistValue_1D(hist,i+1);
     
            CvPoint pt1 = cvPoint(i*scaleX,64*scaleY);
            CvPoint pt2 = cvPoint((i+1)*scaleX,64*scaleY);
            CvPoint pt3 = cvPoint((i+1)*scaleX,64*scaleY - (nextValue/histMax) * 64*scaleY);
            CvPoint pt4 = cvPoint(i*scaleX,64*scaleY - (histValue/histMax) * 64*scaleY);
     
            int numPts = 5;
            CvPoint pts[5];
            pts[0] = pt1;
            pts[1] = pt2;
            pts[2] = pt3;
            pts[3] = pt4;
            pts[4] = pt1;
     
            cvFillConvexPoly(imgHist,pts,numPts,cvScalar(255));
        }
         
        return imgHist;
    }
     
    int main(int argc , char** argv){
        cv::Mat image;
        int dims = 1;
        int size = 256;
        float range[] = {0,255};
        float* ranges[] = {range};
        Mat mat;
        IplImage src;
         
        if(argc < 2){
            printf("Please input picture!\n");
            return -1;
        }
        mat = imread(argv[1], 0);
        src = mat;
        cvShowImage("src", &src);
     
        CvHistogram *hist = cvCreateHist(dims,&size,CV_HIST_ARRAY,ranges,1);
        cvClearHist(hist);
     
     
        IplImage *imgGray = cvCreateImage(cvGetSize(&src),8,1);
     
        cvSplit(&src,imgGray, NULL, NULL, NULL);
     
        cvCalcHist(&imgGray, hist, 0, 0);
        IplImage *histGray = DrawHistogram(hist);
        cvClearHist(hist);
     
        cvShowImage("Gray",histGray);
     
        cv::waitKey(0);
        return 0;
    }

    效果演示

      具体代码内容就不细讲了,结果显示如下:
    
            

    直方图均衡化

      该方式的实现,网上已经有很多例子了,这里提出来讲下,是为了方便和模糊集合灰度变换方式做效果对比。
    

    具体代码

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv/cv.h>  
     
    using namespace cv;
     
    int main(int argc , char** argv){
        cv::Mat image;
        int size = 256;
        Mat mat;
        IplImage src;
        int i, j, width, height;
        int c[size];
        double p[size];
        CvScalar s1;
        double max, min;
     
        if(argc < 2){
            printf("Please input picture!\n");
            return -1;
        }
        mat = imread(argv[1], 0);
        src = mat;
        imshow("src", mat);
        width = mat.rows;
        height = mat.cols;
        uchar* ptr = mat.ptr(0);
     
        for(i=0; i<size; i++){
            p[i] = 0;
            c[i] = 0;   
        }
     
        max=min=ptr[0];
        for(i=0; i<width; i++){
            for(j=0;j<height; j++){
                int k;
                s1 = cvGet2D(&src, i, j);
                k = (int)s1.val[0];
                c[k]++;
                if(max<s1.val[0]){
                    max=s1.val[0];
                }else if(min>s1.val[0]){
                    min=s1.val[0];
                }
            }
        }
        printf("min:%lf, max:%lf\n", min, max);
        for(i=0;i<size;i++){
            if(i > 0){
                p[i] += p[i - 1];
            }
            p[i] += ((double)c[i])/((double)(width*height));
     
            printf("p[%d]:%lf, c[%d]:%d\n", i, p[i], i, c[i]);
        }
     
        for(i=0; i<width; i++){
            for(j=0; j<height; j++){
                s1 = cvGet2D(&src, i, j);
                s1.val[0] = p[(int)s1.val[0]] * (max-min) + min;
                cvSet2D(&src, i, j, s1);
            }
        }
     
        imshow("dst", mat);
        imwrite("dst1.png", mat);
        cv::waitKey(0);
        return 0;
    }

    代码讲解

      这里只讲解下相关的核心代码:
    1、找到图像中最大像素、最小像素值、同时统计出图像所有像素值在[0, 255]范围内出现的数
    max=min=ptr[0];
    for(i=0; i<width; i++){
    for(j=0;j<height; j++){
        int k;
        s1 = cvGet2D(&src, i, j);
        k = (int)s1.val[0];
        c[k]++;
        if(max<s1.val[0]){
             max=s1.val[0];
        }else if(min>s1.val[0]){
         min=s1.val[0];
        }
        }
    }
    2、从0开始到255,依次叠加到当前像素数量的概率。
    for(i=0;i<size;i++){
    if(i > 0){
        p[i] += p[i - 1];
    }
    p[i] += ((double)c[i])/((double)(width*height));
    }
    3、从新在min到max范围内,根据之前统计的像素概率,重新映射调整像素值,生成新图像。
    for(i=0; i<width; i++){
      for(j=0; j<height; j++){
    s1 = cvGet2D(&src, i, j);
    s1.val[0] = p[(int)s1.val[0]] * (max-min) + min;
    cvSet2D(&src, i, j, s1);
      }
    }
    imshow("dst", mat);
    imwrite("dst1.png", mat);

    结果显示

      显示的结果如下:
    
            

    模糊度集合变换

      接下来是看下,模糊度集合变换的实现。相关原理背景请看考<数字图像处理 第三版> 116页。
    该方式的核心原理为公式:
            
            
      公式中的Udark、Ugray、Ubright由对应的当前像素点,根据右边曲线图来计算获得。
    Vd = 0,表示全黑;Vg = 127, 表示中间灰度;Vb = 255,表示白。Vo表示生成的结果图像当前像素值。
    

    具体代码

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv/cv.h>  
     
    using namespace cv;
     
    #define throDark 30
    #define throMid 100
    #define throBright 170
     
    double getUdark(double num){
        double tmpUdark;
        if(num <= throDark){
            tmpUdark = 1;   
        }else if((num > throDark) && (num <= throMid)){
            tmpUdark  = ((double)(throMid - num)) / ((double)(throMid - throDark));
        }else{
            tmpUdark = 0;   
        }
        return tmpUdark;
    }
     
    double getUmid(double num){
        double tmpUmid;
        if((num > throDark) && (num < throMid)){
            tmpUmid  = (num - throDark) / (throMid - throDark);
        }else if((num >= throMid) && (num < throBright)){
            tmpUmid  = (throBright - num) / (throBright - throMid);
        }
        else{
            tmpUmid = 0;    
        }
        return tmpUmid;
    }
     
    double getUbright(double num){
        double tmpUbright;
        if(num <= throMid){
            tmpUbright = 0; 
        }else if((num > throMid) && (num <= throBright)){
            tmpUbright  = (num - throMid) / (throBright - throMid);
        }else{
            tmpUbright = 1;
        }
        return tmpUbright;
    }
     
    int main(int argc , char** argv){
        cv::Mat image;
        Mat mat;
        IplImage src;
        int i, j, width, height;
        CvScalar s1;
        int Uall;
        double tmp, Udark, Umid, Ubright;
     
        if(argc < 2){
            printf("Please input picture!\n");
            return -1;
        }
        mat = imread(argv[1], 0);
        src = mat;
        imshow("src", mat);
        width = mat.rows;
        height = mat.cols;
        uchar* ptr = mat.ptr(0);
     
     
        for(i=0; i<width; i++){
            for(j=0;j<height; j++){
                s1 = cvGet2D(&src, i, j);
                Udark   = getUdark(s1.val[0]);
                Umid    = getUmid(s1.val[0]);
                Ubright = getUbright(s1.val[0]);
                s1.val[0] = (0 * Udark + 127 * Umid + 255 * Ubright) / (Udark + Umid + Ubright);
    //          printf("Udark:%lf, Umid:%lf, Ubright:%lf, s1.val[0]%lf\n", Udark, Umid, Ubright, s1.val[0]);
                cvSet2D(&src, i, j, s1);
            }
        }
     
        imshow("dst", mat);
        imwrite("dst2.png", mat);
        cv::waitKey(0);
        return 0;
    }

    代码讲解

      1、throDark、throMid、throBright对应的就是前面曲线图中:Udark等的阀值。曲线图中阀值为63/127/191。根据图像,这些阀值我们可以自行调整。
    #define throDark 30
    #define throMid 100
    #define throBright 170
      2、getUdark、getUmid、getUbright三个函数通过传入的像素值,分别返回曲线图中对应的Udark,Ugray, Ubright值。
    double getUdark(double num){
        double tmpUdark;
        if(num <= throDark){
            tmpUdark = 1;   
        }else if((num > throDark) && (num <= throMid)){
            tmpUdark  = ((double)(throMid - num)) / ((double)(throMid - throDark));
        }else{
            tmpUdark = 0;   
        }
        return tmpUdark;
    }
     
    double getUmid(double num){
        double tmpUmid;
        if((num > throDark) && (num < throMid)){
            tmpUmid  = (num - throDark) / (throMid - throDark);
        }else if((num >= throMid) && (num < throBright)){
            tmpUmid  = (throBright - num) / (throBright - throMid);
        }
        else{
            tmpUmid = 0;    
        }
        return tmpUmid;
    }
     
    double getUbright(double num){
        double tmpUbright;
        if(num <= throMid){
            tmpUbright = 0; 
        }else if((num > throMid) && (num <= throBright)){
            tmpUbright  = (num - throMid) / (throBright - throMid);
        }else{
            tmpUbright = 1;
        }
        return tmpUbright;
    }
      3、根据前面公式,遍历整个源图像,计算出新图像的所有像素值。
    for(i=0; i<width; i++){
            for(j=0;j<height; j++){
                s1 = cvGet2D(&src, i, j);
                Udark   = getUdark(s1.val[0]);
                Umid    = getUmid(s1.val[0]);
                Ubright = getUbright(s1.val[0]);
                s1.val[0] = (0 * Udark + 127 * Umid + 255 * Ubright) / (Udark + Umid + Ubright);
    //          printf("Udark:%lf, Umid:%lf, Ubright:%lf, s1.val[0]%lf\n", Udark, Umid, Ubright, s1.val[0]);
                cvSet2D(&src, i, j, s1);
            }
        }

    结果显示

      显示的结果如下:
    
           

    结论分析

      原图像、直方图均衡化后图像、模糊集合灰度变换后图像分别对应如下:
    

      

      可以感觉到,模糊集合灰度变化后的图像看起来效果更好。
    具体代码下载: http://download.csdn.net/detail/u011630458/9381775
    展开全文
  • 简单图片对比

    2013-05-27 00:35:56
    采用字符对比方式 判断两张图片是否相同,可以查找一堆图片中的相同图片
  • C#图片对比高速找图源码 源码描述: C#高速找图程序,比较图片的细节处有何异同,像素级的图片比较器,大图找小图,模糊找图,透明找图,Bitmap 大图 = new Bitmap(@"无标题.bmp");  Bitmap 完全对比 = new Bitmap...
  • 仿PS处理图片对比度,只做了对比度为100时的极限情况,关于灰度值的计算,在文件中有详细说明。并对处理过的图片在内存中进行画图,并进行保存。也可输出到界面上,代码段内有说明。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,317
精华内容 3,726
关键字:

图片对比