質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

0回答

2464閲覧

opencv4のmatchTemplateでプログラム再生時にエラーが発生する(c++)(VS2015)

minmisan

総合スコア2

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2019/08/14 09:43

編集2019/08/14 09:54

前提・実現したいこと

opencv4.1とvisualstudio2015を使用してテンプレートマッチングを行いたいです。(c言語)

発生している問題・エラーメッセージ

コンパイルが通ってしまいます。 プログラムを再生するとmatchTemplateでエラーが発生する。

該当のソースコード

#include <stdio.h> #include <DxLib.h> #include <math.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <time.h> #include <string> #include <windows.h> #include <tchar.h> #include <locale.h> #include <atlstr.h> #include "C:\opencv\build\include\opencv2\opencv.hpp" //↑highgui.hppとimgproc.hppが含まれています int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { opencvtest05(); } int opencvtest05(void) // { //PCのスクリーンを読み込む cv::Mat screen_image = opencvtest04().clone(); cv::imwrite("abcde.png", screen_image); //フレーム画像を保存する. cv::namedWindow("test1"); cv::imshow("test1", screen_image); //グレイ化 //cv::Mat gray_image; //cvtColor(screen_image, gray_image, cv::COLOR_BGR2GRAY); //cv::namedWindow("test2"); //cv::imshow("test2", gray_image); //テンプレートを読み込む cv::Mat temp_image = cv::imread("abc.PNG"); cv::namedWindow("test3"); cv::imshow("test3", temp_image); //テンプレートマッチング cv::Mat result_image; cv::matchTemplate(screen_image, temp_image, result_image, cv::TM_CCORR_NORMED); //マッチした点の座標を求める //cv::Point maxPoint; //double maxVal; //minMaxLoc(result_image, NULL, &maxVal, NULL, &maxPoint, cv::Mat()); //double threshould_bar = 0.85; //スレッショルド //if (maxVal > threshould_bar) //{ // cv::rectangle(screen_image, maxPoint, cv::Point(maxPoint.x + temp_image.cols, maxPoint.y + temp_image.rows),cv::Scalar(0,255,255) ,2 ,8 ,0 ); //} //cv::namedWindow("test"); //cv::imshow("test", screen_image); return 0; }

試したこと

イメージ説明
↑エラーの出ている画像

http://ishidate.my.coocan.jp/opencv_12/opencv_12.htm
のサイトのコードほぼそのままです。

cv::matchTemplateの行を飛ばすと画面のスクショ(1920x1080px,ビットの深さ32)とテンプレート画像(153x132px,ビットの深さ32)が表示されるため、
画像の読み込みは成功していると思われる。

cv::Mat screen_image = opencvtest04().clone();を
cv::imreadで読み込むようにしても、コンパイルが通り再生時にmatchTemplateで失敗する。

cv::TM_CCORR_NORMEDをCV_TM_CCORR_NORMEDにするとコンパイルエラーとなる。(識別子が定義されていません)
cv::matchTemplateをmatchTemplateにしても再生時に引っかかる。

コードのコメントアウトしている部分を解除してもコンパイルは通るが、再生時にmatchTemplateで引っかかる。

補足情報(FW/ツールのバージョンなど)

x64のReleaseでビルド
opencvのバージョンは4.1
使用pcはwindows10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tiitoi

2019/08/14 10:06

OpenCV の関数に与えた引数が適切なものでないために例外が発生しています。 例えば、入力画像よりテンプレート画像のほうが大きかったりしないでしょうか?
tiitoi

2019/08/14 10:09

以下を確認してみてください ・入力画像がテンプレート画像より大きいこと ・入力画像、テンプレート画像の型やチャンネル数が一致していること。
minmisan

2019/08/14 11:10

type()やdepth()で要素の型、型のバイト数、チャンネル数を調べてみると 入力画像とテンプレート画像で一致しないことが確認できました。 とても助かりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問