2016-08-23 123 views
0

我成立了OpenCV的使用Visual Studio的一個項目,我得到這些非常奇怪的內存錯誤。我一直在廣泛尋找解決這個問題的方法,雖然有很多類似的問題,但他們要麼沒有回答,要麼不爲我工作。OpenCV的怪異的內存損壞

這是我有問題(從docs得到它)的一些OpenCV的功能之一,它複製我得到的錯誤:

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/imgproc/imgproc.hpp" 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace cv; 
using namespace std; 

Mat src; Mat src_gray; 
int thresh = 100; 
int max_thresh = 255; 
RNG rng(12345); 


/** @function main */ 
int main(int argc, char** argv) 
{ 
    /// Load source image and convert it to gray 
    std::string img = "<path-to-picture>"; 
    src = imread(img, CV_LOAD_IMAGE_COLOR); 

    /// Convert image to gray and blur it 
    cvtColor(src, src_gray, CV_BGR2GRAY); 
    blur(src_gray, src_gray, Size(3, 3)); 

    /// Create Window 
    char* source_window = "Source"; 
    namedWindow(source_window, CV_WINDOW_AUTOSIZE); 
    imshow(source_window, src); 

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

    /// Detect edges using canny 
    Canny(src_gray, canny_output, thresh, thresh * 2, 3); 
    /// Find contours 
    findContours(canny_output, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, Point(0, 0)); 

    /// Draw contours 
    Mat drawing = Mat::zeros(canny_output.size(), CV_8UC3); 
    for (int i = 0; i< contours.size(); i++) 
    { 
     Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255)); 
     drawContours(drawing, contours, i, color, 2, 8, hierarchy, 0, Point()); 
    } 

    /// Show in a window 
    namedWindow("Contours", CV_WINDOW_AUTOSIZE); 
    imshow("Contours", drawing); 


    waitKey(0); 
    return(0); 
} 

奇怪的是,findContours()的作品完美,

Expression: "(_Ptr_user & (_BIG_ALLOCATION_ALIGNMENT - 1)) == 0" && 0 

關於如何解決此問題的任何想法:但在那之後的程序與此錯誤崩潰?這是我的OpenCV設置:

  • 的Visual Studio 2015年,調試/發佈64
  • OpenCV的2.4.13(預建)
  • C++包括build\include
  • C++連接\build\x64\vc12\lib
  • 依賴關係包括上述文件夾中的庫。
+0

首先,按重試,並按照調用堆棧,直到你達到自己的代碼來找出哪些OpenCV的功能失效。 – molbdnilo

+0

@molbdnilo在我的項目代碼中,我評估了堆棧跟蹤*多次*,並確信findContours()失敗。如果你願意,我也可以添加堆棧跟蹤。 – prakharsingh95

+0

哪一個是真的呢? 「findContours()完美地工作」或「我確定findContours()失敗」? – molbdnilo

回答

1

您正在使用OpenCV構建與vc12編譯器(Visual Studio 2013),但在您的項目中使用vc14(Visual Studio 2105)。

請務必使用與VCl 4編譯預生成庫。

我敢肯定,OpenCV的3.1已經預生成二進制文件VCl 4。我不知道OpenCV 2.4.13是否也有它們(可能不是)。在這種情況下,你需要重新編譯的OpenCV與VCl 4,或切換至OpenCV的3.1

+0

我從來沒有內置的OpenCV自己的堆棧跟蹤,所以我希望有一個簡單的解決辦法:( – prakharsingh95

+0

只需下載OpenCV的3.1以後,或使用Visual Studio 2013; d – Miki

+0

原來建築2.4.13上VCl 4失敗*可怕*截止了建設它VC12,因爲我需要OpenMP和CUDA。 – prakharsingh95