2015-11-20 48 views
-3

我已經完成了打開cv的閾值,但我得到了一個完整的黑色窗口作爲輸出。我使用的命令是:OPENCV Thresholding

IplImage* frame = cvLoadImage("threshold.jpg",CV_LOAD_IMAGE_COLOR); 
IplImage* dst = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
IplImage* grayframe = cvCreateImage(cvGetSize(frame),IPL_DEPTH_8U,1); 
cvCvtColor(frame,grayframe,CV_RGB2GRAY); 

double thresh = 127; 
double maxValue = 255; 
double cvThreshold(const CvArr* grayframe,CvArr* dst,double thresh,double maxValue,int CV_THRESH_BINARY_INV); 

請幫助我得到正確的輸出。

+0

好,如果你使用的格式化工具......,使之更加清晰 – Chella

+1

請使用OpenCV中的C++ API,像上面的代碼應該沒有更多的寫入。 – berak

回答

1

首先,我建議你仔細閱讀本 Threshold_Opencv

double thresh = 127;這意味着這intensity小於127將是黑色,其餘的將是白色的,所以要儘量改變從值的所有像素例如127到200並再次檢查。

0

您正在使用函數聲明而不是函數調用。最後行更改爲:

cvThreshold(grayframe, dst, thresh, maxValue, CV_THRESH_BINARY_INV); 

全碼:

#include <opencv2/opencv.hpp> 
using namespace cv; 

int main() 
{ 
    IplImage* frame = cvLoadImage("threshold.jpg", CV_LOAD_IMAGE_COLOR); 
    IplImage* dst = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1); 
    IplImage* grayframe = cvCreateImage(cvGetSize(frame), IPL_DEPTH_8U, 1); 
    cvCvtColor(frame, grayframe, CV_RGB2GRAY); 

    double thresh = 127; 
    double maxValue = 255; 
    cvThreshold(grayframe, dst, thresh, maxValue, CV_THRESH_BINARY_INV); 

    cvShowImage("Threshold", dst); 
    cvWaitKey(); 

    return 0; 
} 

你應該,但是,避免使用這種過時的語法。您可以使用C++的語法,如:

#include <opencv2/opencv.hpp> 
using namespace cv; 

int main() 
{ 
    Mat3b frame = imread("threshold.jpg", IMREAD_COLOR); 
    Mat1b grayframe; 
    cvtColor(frame, grayframe, COLOR_BGR2GRAY); 

    double thresh = 127; 
    double maxValue = 255; 

    Mat1b dst; 
    threshold(grayframe, dst, thresh, maxValue, THRESH_BINARY_INV); 

    imshow("Threshold", dst); 
    waitKey(); 

    return 0; 
}