![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?08b1c8b)
現在、以下の2つを参考にして赤色の領域の面積を求めるプログラムを書いています。
・http://carnation.is.konan-u.ac.jp/seminar/colore … (色検出)
・https://oshiete.goo.ne.jp/qa/4743115.html (面積計算)
そして、下が上の文献を参考に書いた自分のプログラムです。
int main(int argc, char** argv)
{
/*カメラキャプチャ設定*/
IplImage *source = 0;
CvCapture *capture = 0;
capture = cvCreateCameraCapture(0);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 640);
cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 480);
CvMemStorage *storage;
/*画像構造体による変数の定義*/
IplImage * hsvimage=0;
IplImage * hueimage=0;
IplImage * hueimage1 = 0;
IplImage * hueimage2 = 0;
IplImage * saturationimage = 0;
IplImage * valueimage = 0;
IplImage * hueimage3 = 0;
IplImage * saturationimage3 = 0;
IplImage * valueimage3 = 0;
IplImage * hue_saturation = 0;
IplImage * image_black_white = 0;
/*windowの定義*/
cvNamedWindow("orig",CV_WINDOW_AUTOSIZE);
cvNamedWindow("result", CV_WINDOW_AUTOSIZE);
while (1)
{
/*カメラ画像の受け取り*/
source = cvQueryFrame(capture);
CvSize sizeOfImage = cvGetSize(source);
/*ヘッダの作成とデータ領域の確保*/
hsvimage = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 3);
hueimage = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
hueimage1 = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
hueimage2 = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
hueimage3 = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
saturationimage = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
saturationimage3 = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
valueimage = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
valueimage3 = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
hue_saturation = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
image_black_white = cvCreateImage(cvGetSize(source), IPL_DEPTH_8U, 1);
// RGB(BGR)画像をHSV画像に変換する(source → hsvimage)
cvCvtColor(source, hsvimage, CV_BGR2HSV);
//H,S,V成分の抽出
cvSplit(hsvimage, hueimage, saturationimage, valueimage, NULL);
storage = cvCreateMemStorage(0);
/*閾値処理*/
cvThreshold(hueimage, hueimage1, 160 , 255, CV_THRESH_BINARY);
cvThreshold(hueimage, hueimage2, 180 , 255, CV_THRESH_BINARY_INV);
cvThreshold(saturationimage, saturationimage3, 60, 255, CV_THRESH_BINARY);
cvThreshold(valueimage, valueimage3, 80, 255, CV_THRESH_BINARY);
//条件を満たした領域をimage_black_whiteとする
cvAnd(hueimage1, hueimage2, hueimage3);
cvAnd(hueimage3, saturationimage3, hue_saturation);
cvAnd(hue_saturation, valueimage3, image_black_white);
/*赤い面積の計算*/
typedef struct
{
int dim;//総面積
int white;//白の面積
int black;//黒の面積
}MONOSPACE;
MONOSPACE space = { 0 };
for (int y = 0; y < image_black_white->height; y++)
{
for (int x = 0; x < image_black_white->width; x++)
{
const int val = image_black_white->imageData[y * image_black_white->widthStep + x];
if (val & 1)++space.white;//白色なのでカウントする
}
}
//総面積
space.dim = image_black_white->width * image_black_white->height;
//黒い面積
space.black = space.dim - space.white;
std::cout << "赤の面積は" << space.white << "です" << std::endl;
cvShowImage("orig", source);
cvShowImage("result", image_black_white);
//cvWaitKey(10);
int key = cv::waitKey(10);
if (key == 'q') {
break;
}
}
cvDestroyWindow("orig");
cvDestroyWindow("result");
cvReleaseImage(&source);
cvReleaseImage(&hsvimage);
cvReleaseImage(&hueimage);
cvReleaseImage(&hueimage1);
cvReleaseImage(&hueimage2);
cvReleaseImage(&hueimage3);
cvReleaseImage(&saturationimage);
cvReleaseImage(&saturationimage3);
cvReleaseImage(&valueimage);
cvReleaseImage(&valueimage3);
cvReleaseImage(&hue_saturation);
cvReleaseImage(&image_black_white);
cvReleaseMemStorage(&storage);
return 0;
}
_____
この内容で書くと途中で写真のようなメモリエラーが発生します。対処法をお願いします。
![「OpenCVでのメモリエラーについて」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/d/1201030_582ab43fd213e/M.png)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- その他(車) DAIHATSU HIJET TRUCK JUMBO EXTEND(ハイゼットジャンボエクステンド) 2 2023/05/01 17:06
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- HTML・CSS 疑似要素で背景画像に指定したSVG画像の色変更 2 2023/01/30 22:45
- その他(プログラミング・Web制作) Latexに関する質問です。 3 2023/05/23 10:18
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- 化学 化学 電気 物理 電気化学の実験をサイクリックボルタモグラムCV法を利用して行いました。 参照電極に 1 2023/06/26 10:35
- 専門店・ホームセンター テレビ、pc台を探しています。 3 2023/08/13 14:50
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・【大喜利】【投稿~1/31】『寿司』がテーマの本のタイトル
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++で表を作成したいのです ...
-
コマンドプロンプトのウィンド...
-
intとlongは同じ?
-
再帰処理をループ処理に変換
-
2の補数を計算するプログラム
-
条件が多い場合
-
画像の拡大・縮小
-
再起呼び出しの回数をカウント...
-
再帰呼び出しについて
-
OpenCV輪郭抽出→座標取得でのバ...
-
分数の足し算をさせるプログラ...
-
C言語でテーブル引きしたら速度...
-
C言語で%を使わない余りの出し方
-
whileとifを使い偶数を出すには
-
16bitで乱数を生成する方法
-
迷路を脱出する経路探索プログ...
-
C++ Debug Errorについて教えて
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
-
「Aに対するBの割合」と「Aに対...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報