OpenCV 閾值化操作cvThreshold 和 自適應閾值cvAdaptiveThreshold操作

載入一幅圖片,使用cvThreshold函數對其進行操作,設置閾值爲128。

使用自適應閾值進行同樣操作

#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>

using namespace std;
using namespace cv;


int main(int argc, const char * argv[]) {
    /*1.載入圖像*/
    const char filename[] = "/Users/linwang/Downloads/30.png";
    IplImage * Img = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
    
    /*2. 將這幅圖像縮小三次,並顯示結果*/
    double fscale = 0.5;
    CvSize czSize;
    IplImage * dst =  0;
    czSize.width  = Img->width  * fscale;
    czSize.height = Img->height * fscale - 13;
    dst =  cvCreateImage(czSize, Img->depth, Img->nChannels);
    cvResize(Img, dst);
    cvShowImage("Resize", dst);
    
    /*3.利用cvThreshold()函數對其進行操作*/
    
    /*3.1 CV_THRESH_BINARY dsti = srci > T ? M : 0 */
    IplImage * BINARY = cvCloneImage(dst);
    cvSetZero(BINARY);
    cvThreshold(dst, BINARY, 128, 255, CV_THRESH_BINARY);
    cvShowImage("BINARY", BINARY);
    
    /*3.2 CV_THRESH_BINARY_INV dsti = srci > T ? 0 : M */
    IplImage * BINARY_INV = cvCloneImage(dst);
    cvSetZero(BINARY_INV);
    cvThreshold(dst, BINARY_INV, 128, 255, CV_THRESH_BINARY_INV);
    cvShowImage("BINARY_INV", BINARY_INV);
    
    /*3.3 CV_THRESH_TRUNC dsti = srci > T ? M : srci */
    IplImage * TRUNC = cvCloneImage(dst);
    cvSetZero(TRUNC);
    cvThreshold(dst, TRUNC, 128, 255, CV_THRESH_TRUNC);
    cvShowImage("TRUNC", TRUNC);
    
    /*3.4 CV_THRESH_TOZERO_INV dsti = srci > T ? 0 : srci */
    IplImage * TOZERO_INV = cvCloneImage(dst);
    cvSetZero(TOZERO_INV);
    cvThreshold(dst, TOZERO_INV, 128, 255, CV_THRESH_TOZERO_INV);
    cvShowImage("TOZERO_INV", TOZERO_INV);
    
    /*3.5 CV_THRESH_TOZERO dsti = srci > T ? srci : 0 */
    IplImage * TOZERO = cvCloneImage(dst);
    cvSetZero(TOZERO);
    cvThreshold(dst, TOZERO, 128, 255, CV_THRESH_TOZERO);
    cvShowImage("TOZERO", TOZERO);
    
    /*4. 使用自適應閾值技術來實現此5個操作,自適應閾值操作是用3 * 3 區域加權平均,再減去5得到*/
    /*4.1 CV_THRESH_BINARY*/
    IplImage * SH_BINARY = cvCloneImage(dst);
    cvSetZero(SH_BINARY);
    cvAdaptiveThreshold(dst, SH_BINARY, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,5);
    cvShowImage("ADA_BINARY", SH_BINARY);
    
    IplImage * SH_BINARY_INV = cvCloneImage(dst);
    cvSetZero(SH_BINARY_INV);
    cvAdaptiveThreshold(dst, SH_BINARY_INV, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY_INV,3,5);
    cvShowImage("ADA_BINARY_INV", SH_BINARY_INV);
 
    cvWaitKey(0);
    return 1;
}













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章