天天看點

opencv1:帶滾動條的圖檔二值化處理

首先用opencv 來顯示一副圖檔。這很簡單,代碼如下:

opencv 顯示一副圖檔

#include <opencv2/opencv.hpp>  

using namespace cv; 

int main(int argc, char** argv){
    IplImage* img = cvLoadImage("image2.jpg");
    cvNamedWindow("Example1", CV_WINDOW_AUTOSIZE);
    cvShowImage("Example1", img);
    cvWaitKey(0);
    cvReleaseImage(&img);
    cvDestroyWindow("Example1");
}      

顯示結果:

opencv1:帶滾動條的圖檔二值化處理

完整opencv實作

#include <opencv2/opencv.hpp>  

using namespace cv; 
using namespace std;

IplImage* in = NULL;
IplImage* out = NULL;
IplImage* g_GrayImage = NULL;
const char *InputTitle = "Input Image";
const char *OutputTitle = "Output Image";

void on_trackbar(int pos)
{
    // 轉為二值圖
    cvThreshold(g_GrayImage, out, pos, 255, CV_THRESH_BINARY);
    // 顯示二值圖
    cvShowImage(OutputTitle, out);
}

int main(int argc, char** argv){
    cvNamedWindow(InputTitle, CV_WINDOW_AUTOSIZE);
    cvNamedWindow(OutputTitle, CV_WINDOW_AUTOSIZE);

    in = cvLoadImage("image2.jpg");

    // 轉為灰階圖
    g_GrayImage = cvCreateImage(cvGetSize(in), IPL_DEPTH_8U, 1);
    cvCvtColor(in, g_GrayImage, CV_BGR2GRAY);

    // 建立二值圖
    out = cvCreateImage(cvGetSize(g_GrayImage), IPL_DEPTH_8U, 1);

    // 滑動條  
    int nThreshold = 0;
    cvCreateTrackbar("二值圖門檻值", OutputTitle, &nThreshold, 255, on_trackbar);

    cvShowImage(InputTitle, in);
    cvShowImage(OutputTitle, out);
    cvWaitKey(0);
    cvReleaseImage(&in);
    cvReleaseImage(&out);
    cvDestroyWindow(InputTitle);
    cvDestroyWindow(OutputTitle);

    return 0;
}