opencv找出两幅图像不同!

该程序通过OpenCV库加载并显示两幅图像,然后以3*3的网格方式对比图像之间的像素差异。如果在任何区域内找到颜色不匹配的像素,则认为两幅图像存在不同,否则显示相同。程序在屏幕上创建两个窗口分别展示图像,并在比较后销毁窗口并释放内存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/* 程序名:hello.c
  功能:从磁盘中读入图像文件,并将图像显示在屏幕上
*/
#include "cv.h"
#include "highgui.h"
#include <stdio.h>
int main( int argc, char** argv )
{
    IplImage* pImg,*pImg2; //声明IplImage指针
 int row,col,row1,col1;
 int sign;
 int i=0;
    if( argc == 3 && (pImg = cvLoadImage( argv[1], 1)) != 0 && (pImg2 = cvLoadImage( argv[2], 1)) != 0)
    {
  cvNamedWindow( "Image", CV_WINDOW_AUTOSIZE ); //创建窗口
        cvShowImage( "Image", pImg ); //显示图像
  cvNamedWindow( "Image2", CV_WINDOW_AUTOSIZE ); //创建窗口
        cvShowImage( "Image2", pImg2 ); //显示图像
  
  for(i=0;i<9;i++)
  {
   for(row1=row=(i/3)*(pImg->height/3);row<row1+(pImg->height/3);row++)
   {
    uchar* ptr=(uchar*)(pImg->imageData+row*pImg->widthStep);
    uchar* ptr2=(uchar*)(pImg2->imageData+row*pImg2->widthStep);
    sign=0;
    for(col1=col=(i%3)*(pImg->width/3);col<col1+(pImg->width/3);col++)
    {
     if(ptr[3*col]!=ptr2[3*col]||ptr[3*col+1]!=ptr2[3*col+1]||ptr[3*col+2]!=ptr2[3*col+2])
     {
      sign=i;
      continue;
     }
    }
    if(sign!=0)
    {
     continue;
    }
    
   }
   if(sign!=0)
    {
     printf("the %d picture is the same!",sign);
    
    }
  }
  
// if(row==pImg->height&&row==pImg2->height)printf("two pictures are the same!");
// else printf("two pictures are different!");

        cvWaitKey(0); //等待按键
  cvDestroyWindow( "Image" );//销毁窗口
        cvReleaseImage( &pImg ); //释放图像
  cvDestroyWindow( "Image2" );//销毁窗口
        cvReleaseImage( &pImg2 ); //释放图像
        return 0;
 }
    return -1;
}
分成3*3块比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值