2

我堅持的問題,而在OpenCV的實施倒角配套方案調試斷言失敗VC 包括矢量矢量迭代器+偏移超出範圍chamferMatching opencv的

https://開頭code.ros.org/trac/的OpenCV /瀏覽器/中繼/ OpenCV的/樣品/ CPP/chamfer.cpp?轉= 4194

以下是它在讀取 模板圖像

http://img593.imageshack.us/img593/6391/5klx.png

和測試圖像代碼210 http://img5.imageshack.us/img5/6619/u76z.png

,我使用VS 2008和OpenCV2.4.6

#include "stdafx.h" 

#include <opencv2/imgproc/imgproc.hpp> 
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/contrib/contrib.hpp> 
#include <iostream> 
using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{  
    IplImage *src; 
    src = cvLoadImage("C:\\Users\\JOSHI\\Desktop\\Images\\logo_in_clutter.png",1);  
    Mat img=cvarrToMat(src); 
    imshow("Mat",img); 

    src = cvLoadImage("C:\\Users\\JOSHI\\Desktop\\Images\\logo.png",1); 
    Mat tpl=cvarrToMat(src); 
    imshow("Mat",tpl); 
    Mat cimg; 

    // if the image and the template are not edge maps but normal grayscale images, 
    // you might want to uncomment the lines below to produce the maps. You can also 
    // run Sobel instead of Canny.  
    Canny(img, img, 5, 50, 3); 
    Canny(tpl, tpl, 5, 50, 3);  
    vector<vector<Point> > results; 
    vector<float> costs; 
    int best = chamerMatching(img, tpl, results, costs); 
    if(best < 0) 
    { 
     cout << "not found;\n"; 
     return 0; 
    }  
    size_t i, n = results[best].size(); 
    for(i = 0; i < n; i++) 
    { 
     Point pt = results[best][i]; 
     if(pt.inside(Rect(0, 0, cimg.cols, cimg.rows))) 
      cimg.at<Vec3b>(pt) = Vec3b(0, 255, 0); 
    } 
    imshow("result", cimg); 

    waitKey(); 
    return 0; 
} 

這是錯誤的圖像 http:// img138.imageshack.us/img138/7339/m1d.png

你可以建議我,因爲我是新來的OpenCV爲什麼我收到此錯誤和圖像處理

回答

1

我有同樣的問題。解決方案:http://code.opencv.org/issues/3603 你需要從源代碼下載OpenCV的,打開chamfermatching.cpp和註釋行:

~Matching() 
{ 
    for (size_t i = 0; i<templates.size(); i++) { 
     //delete templates[i]; 
    } 
} 

然後,你需要重建的OpenCV。在此之後它應該工作。