opencvにおけるmat型の扱いに関して

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

opencvにおけるmat型の扱いに関して

#1

投稿記事 by Ute » 9年前

私は今opencvを使った画像処理に取り組んでいるものです.
opencvに関しては3ヶ月程度しか経験がありません.

先日プログラミング中にアクセス違反が発生してしまい、原因を探ってみたところ、
どうやらグローバル変数として宣言したmatポインタとimreadを組み合わせるとアクセス違反が出てしまうようです.....
アクセス違反が発生する理由と解決方法について何かアドバイスを頂けませんか?
環境はvs12、opencvのバージョンは2.4.9です.

コード:

//インクルードファイル指定
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp>
cv::Mat *InputImage;
int main(){
/*main関数中のコメントアウトを外すとアクセス違反が発生する.*/
	cv::Mat m = cv::imread("ImageP.png");
	//*InputImage = m;
	cv::namedWindow("image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
	//cv::imshow("image",*InputImage);
	cv::imshow("image",m);
	cv::waitKey(0);
	return 0;
}

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

Re: opencvにおけるmat型の扱いに関して

#2

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

InputImageは明示的に初期化されていない静的記憶期間を持つ変数なので、zero-initializeされてヌルポインタになります。
ヌルポインタをデリファレンスしてはいけません。
デリファレンスする前に有効な領域へのポインタを代入するか、このような自殺コードは必要なければ消すといいでしょう。
オフトピック
opencvは全く本質じゃないですね…
Ute さんが書きました:opencvに関しては3ヶ月程度しか経験がありません.
opencvに関して「は」とのことですが、C++自体の経験はどのくらいでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ute

Re: opencvにおけるmat型の扱いに関して

#3

投稿記事 by ute » 9年前

手早いご回答ありがとうございます.
うっかりしておりました、確かにこの場合なら以下の様に
コード変更するのが妥当ですね.失礼致しました.
cppの経験に関しては1年前後でしょうか....、流石に間抜けな質問過ぎましたね....

コード:

//インクルードファイル指定
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp>
cv::Mat *InputImage;
int main(){
	cv::Mat m = cv::imread("ImageP.png");
	InputImage = &m;
	cv::namedWindow("image", CV_WINDOW_AUTOSIZE|CV_WINDOW_FREERATIO);
	cv::imshow("image",*InputImage);

	cv::waitKey(0);
	return 0;
}

閉鎖

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