2014-01-15 113 views
0
#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    Mat image=cvLoadImage("C:/Users/Administrator/Desktop/Desert.jpg",1); 
    Mat imagegray, output, imageresult;; 

    int thresh=150; 

    cvtColor(image, imagegray,CV_BGR2GRAY); 

    vector<vector<Point>>contours; 
    vector<Vec4i>hierarchy; 

    Canny(imagegray, imageresult,thresh, thresh*2); 

    findContours(imageresult,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0)); 

    Mat drawing=Mat::zeros(imagegray.size(),CV_8UC3); 
    approxPolyDP(contours,imageresult,100,true); 

    namedWindow("Display",1); 
    imshow("Display",imageresult); 
    waitKey(0); 
    return(0); 
} 

在()無法執行approxPolyDP()

功能不工作

approxPolyDP上面給出的代碼。在使用斷點運行時,程序不會在執行此功能後執行。這裏給出的代碼有什麼問題?

回答

2

以下代碼工作

Mat image=cvLoadImage("face1.jpg",1); 
Mat imagegray, output, imageresult;; 
Mat canny; 

cvtColor(image, imagegray,CV_BGR2GRAY); 

vector<vector<Point>>contours; 
vector<Vec4i>hierarchy; 

Canny(imagegray,canny,50,150); 

findContours(canny,contours,hierarchy,CV_RETR_TREE,CV_CHAIN_APPROX_SIMPLE,cvPoint(0,0)); 



    Mat drawing=Mat::zeros(imagegray.size(),CV_8UC3); 
vector<Point>contours_approx; 
    approxPolyDP(contours[0],contours_approx,100,true) 
//approxPolyDP(contours,imageresult,100,true); 

drawContours(image,contours,-1,Scalar(255,0,0)); 

namedWindow("Display"); 
imshow("Display",image); 
waitKey(0); 
return(0); 

findcontour()需要精明/閾值的二值圖像的輸入。

approxPolyDP()將近似曲線到另一條曲線(點的向量)。

+0

謝謝。另外,我可以使用approxPolyDP()來計算圖像中邊的數量嗎?如果是這樣,怎麼樣? –

+0

也請檢查問題,看看你能否找出答案。 http://stackoverflow.com/questions/21130735/matchshapes-function-not-working –