最近项目中用到了图像差分,到网上一搜,资料大部分为opencv1.0的,可是我使用的是opencv2.46,因此在编程过程中出现不少问题,在进行 otsu处理的时候,要求图像必须是8bit的,可能没注意到这点,折腾了我两天,总算解决啦。下面直接附上代码吧!
#include "stdafx.h"
#include <iostream>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char* argv[])
{
Mat oddImg;
Mat evenImg;
Mat diffImg;
//读取图像
oddImg = imread("2odd.bmp",CV_LOAD_IMAGE_GRAYSCALE ); //之前总是错误是因为少了一个0
evenImg = imread("2even.bmp",CV_LOAD_IMAGE_GRAYSCALE);
imshow("奇场图像",oddImg);
imshow("偶场图像",evenImg);
//差分图像
absdiff(evenImg, oddImg, diffImg);
imshow("差分图像",diffImg);
//二值化处理:自适应阈值otus,自适应阈值
threshold(diffImg, diffImg, 0, 255, CV_THRESH_BINARY | CV_THRESH_OTSU);
imshow("二值化图像",diffImg);
waitKey(0);
return