Visual Studio2010 OpenCV2.4.9 ヒープが壊れる

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
joe

Visual Studio2010 OpenCV2.4.9 ヒープが壊れる

#1

投稿記事 by joe » 8年前

Visual Studio2010環境下でOpenCV2.4.9を動かしており、以下のプログラムを動かしているのですが、
Windows によって XXX.exe でブレークポイントが発生しました。

ヒープが壊れていることが原因として考えられます。feature.exe または読み込まれた DLL にバグがあります。

あるいは、feature.exe がフォーカスを持っているときに、ユーザーが F12 キーを押したことが原因として考えられます。

可能であれば、出力ウィンドウに詳細な診断情報が表示されます。

とのエラーが出てきます。
他にもSIFT特徴量を用いたプログラムを実行しているのですが、必ずといっていいほどヒープが壊れてしまいます。
原因が特定できず、困っているのですが、どなたかわかる方いらっしゃいませんでしょうか?

以下プログラムです。
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/nonfree/nonfree.hpp>
#include <opencv2/legacy/legacy.hpp> //BruteForceMatcheに必要。

#ifdef _DEBUG
//Debugモードの場合
#pragma comment(lib,"opencv_core249d.lib")
#pragma comment(lib,"opencv_imgproc249d.lib")
#pragma comment(lib,"opencv_highgui249d.lib")
#pragma comment(lib,"opencv_video249d.lib")
#else
//Releaseモードの場合
#pragma comment(lib,"opencv_core249.lib")
#pragma comment(lib,"opencv_imgproc249.lib")
#pragma comment(lib,"opencv_highgui249.lib")
#pragma comment(lib,"opencv_video249.lib")
#endif

int main(int argc, char *argv[])
{
//画像読み込み
cv::Mat colorImg1 = cv::imread("");
cv::Mat colorImg2 = cv::imread("");
if(colorImg1.empty() || colorImg2.empty()){
std::cout << "No Image" << std::endl;
return -1;
}

//特徴点抽出用のグレー画像用意
cv::Mat grayImg1, grayImg2;
cv::cvtColor(colorImg1, grayImg1, CV_BGR2GRAY);
cv::normalize(grayImg1, grayImg1, 0, 255, cv::NORM_MINMAX);
cv::cvtColor(colorImg2, grayImg2, CV_BGR2GRAY);
cv::normalize(grayImg2, grayImg2, 0, 255, cv::NORM_MINMAX);

//SIFT
cv::SiftFeatureDetector detector;
cv::SiftDescriptorExtractor extractor;
//SURF
//cv::SurfFeatureDetector detector(1000);
//cv::SurfDescriptorExtractor extractor;

//画像から特徴点を検出
std::vector<cv::KeyPoint> keypoints1;
detector.detect(grayImg1, keypoints1);
std::vector<cv::KeyPoint> keypoints2;
detector.detect(grayImg2, keypoints2);

//画像の特徴点における特徴量を抽出
cv::Mat descriptors1;
extractor.compute(grayImg1, keypoints1, descriptors1);
cv::Mat descriptors2;
extractor.compute(grayImg2, keypoints2, descriptors2);

//特徴点の対応付け
std::vector<cv::DMatch> matches;
cv::BruteForceMatcher<cv::L2<float> > matcher;
matcher.match(descriptors1, descriptors2, matches);

//ソートしたn番目までの対応線を表示させる。nth_elementは要素を基準要素よりも手前に移動させるある種のソート
int N=50;
nth_element(matches.begin(), matches.begin()+N-1, matches.end());
matches.erase(matches.begin()+N, matches.end());

//対応づけされた画像の用意
cv::Mat matchedImg;
cv::drawMatches(colorImg1, keypoints1, colorImg2, keypoints2, matches, matchedImg);

/// 画像を表示するウィンドウの名前,プロパティ
// CV_WINDOW_AUTOSIZE : ウィンドウサイズを画像サイズに合わせる
// CV_WINDOW_FREERATIO : ウィンドウのアスペクト比を固定しない
cv::namedWindow("image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
// ウィンドウ名でウィンドウを指定して,そこに画像を描画
cv::imshow("image", matchedImg);

// キー入力を(無限に)待つ
cv::waitKey(0);
return 0;
}

と成りのトトロ

Re: Visual Studio2010 OpenCV2.4.9 ヒープが壊れる

#2

投稿記事 by と成りのトトロ » 8年前

OpenCV2.4.9をインストールして見ましたが上手く動きませんでした。Debugが可能なようなのでDebugをするのと少しずつ範囲を狭めてゆくのがよいでしょう。http://godai.hateblo.jp/entry/20101229/1299899321の様に原因はたくさん考えられるので。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: Visual Studio2010 OpenCV2.4.9 ヒープが壊れる

#3

投稿記事 by みけCAT » 8年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態でBBCodeのcodeタグで囲んでいただけると、見やすくてありがたいです。
joe さんが書きました: //ソートしたn番目までの対応線を表示させる。nth_elementは要素を基準要素よりも手前に移動させるある種のソート
int N=50;
nth_element(matches.begin(), matches.begin()+N-1, matches.end());
matches.erase(matches.begin()+N, matches.end());
matchesの要素数は確実にN以上ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る