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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4218閲覧

visual studio2017でimreadが読み込めない

minimize

総合スコア23

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

OpenCV

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

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/11/24 07:13

編集2018/11/25 03:44

質問失礼します。
Visual Studio2017でc++のコードを書いています。
OpenCVを使ってテンプレートマッチングをしようとしたのですが、
テンプレート画像をimreadで読み込もうとしたときに
エラーが出てしまい、画像を読み込むことができません。
コードは以下のようになっています。

c++

1 2#include <opencv2/opencv.hpp> 3#include "opencv2/highgui/highgui.hpp" 4#include "iostream" 5#include "opencv2/core/core.hpp" 6#include "opencv2/features2d/features2d.hpp" 7 8#include <windows.h> 9 10 11using namespace cv; 12using namespace std; 13 14 15BITMAPINFOHEADER CreateBITMAPINFOHEADER(int width, int height) 16{ 17 BITMAPINFOHEADER bi; 18 bi.biSize = sizeof(BITMAPINFOHEADER); 19 bi.biWidth = width; 20 bi.biHeight = -height; 21 bi.biPlanes = 1; 22 bi.biBitCount = 32; 23 bi.biCompression = BI_RGB; 24 bi.biSizeImage = 0; 25 bi.biXPelsPerMeter = 0; 26 bi.biYPelsPerMeter = 0; 27 bi.biClrUsed = 0; 28 bi.biClrImportant = 0; 29 30 return bi; 31} 32 33Mat ConvertHWNDToMat(HWND hwnd) 34{ 35 RECT rect; 36 GetClientRect(hwnd, &rect); 37 int width = rect.right - rect.left; 38 int height = rect.bottom - rect.top; 39 HDC g_hdc = GetDC(hwnd); 40 41 BITMAPINFOHEADER bi = CreateBITMAPINFOHEADER(width, height); 42 LPDWORD lpPixel; 43 44 HBITMAP hbmp = CreateDIBSection(g_hdc, (BITMAPINFO*)&bi, DIB_RGB_COLORS, (void**)&lpPixel, NULL, 0); 45 46 HDC hdc = CreateCompatibleDC(g_hdc); 47 SelectObject(hdc, hbmp); 48 BitBlt(hdc, 0, 0, width, height, g_hdc, 0, 0, SRCCOPY); 49 ReleaseDC(hwnd, g_hdc); 50 51 Mat mat(height, width, CV_8UC4, Scalar::all(0)); 52 53 const int channel = 4; 54 memcpy(mat.data, lpPixel, (sizeof(char) * (width * height) * channel)); 55 56 57 return mat; 58} 59 60 61void Error_message(int error_num) { 62 63 switch (error_num){ 64 65 case 0: //Not Mat 66 67 cout << "Not Mat" << endl; 68 69 break; 70 71 72 case 1: //Not Active window 73 74 cout << "Not active window" << endl; 75 76 break; 77 78 case 2: 79 80 cout << "Not template image " << endl; 81 82 break; 83 84 85 default: 86 break; 87 88 } 89 90} 91 92 93void Pursuit(Mat img) { // target pursuit 94 95 Mat temp_img, result; 96 97 temp_img = imread("C:\Users\minimize\Pictures\Saved Pictures\ball.jpg"); //Releaseの時のエラーが出る位置 98 99 if (!temp_img.data) Error_message(2); 100 101 matchTemplate(img, temp_img, result, TM_CCORR_NORMED); //Debugの時のエラーが出る位置 102 103 Point temp_position; 104 minMaxLoc(result, 0, 0, 0, &temp_position); 105 rectangle(img, temp_position, Point(temp_position.x + temp_img.cols, 106 temp_position.y + temp_img.rows), Scalar(0, 255, 255), 2, 8, 0); 107 108 imshow("Mat", img); 109 110} 111 112int DoGetActiveWindow() { 113 114 char buf[1000]; 115 HWND activeWindow; 116 117 activeWindow = GetForegroundWindow(); //Get active window 118 119 GetWindowText(activeWindow, buf, 1000); //Get active window text 120 121 LPARAM param = (LPARAM)"ResearchProject2"; //Want to open project name 122 123 if (strcmp(buf, (char*)param) == 0) { //Match project name 124 125 //HBITMAP bmp = GetBitmap(activeWindow); 126 Mat mat_img = ConvertHWNDToMat(activeWindow); 127 128 if (mat_img.empty()) { 129 Error_message(0); 130 return 0; 131 } 132 133 Pursuit(mat_img); //target pursuit 134 135 return 1; 136 }else{ 137 return 0; 138 } 139 140 if (activeWindow == NULL) { 141 Error_message(1); 142 return 0; 143 } 144 145 return 0; 146 147} 148 149 150int main() { 151 152 STARTUPINFO tStartupInfo = { 0 }; 153 PROCESS_INFORMATION tProcessInfomation = { 0 }; 154 GetStartupInfo(&tStartupInfo); 155 156 CreateProcess( 157 "C:\Users\mizuho\Desktop\sotuken\ResearchProject2.exe", // Name of executable module 158 NULL, // Comand line texts 159 NULL, // Security descriptor 160 NULL, // Security descriptor 161 FALSE, // Handle inheritance option 162 0, // Create flag 163 NULL, // New environmental block 164 NULL, // Name of current directory 165 &tStartupInfo, // Startup information 166 &tProcessInfomation // Process information 167 ); 168 169 Sleep(1000); 170 171 while (1) { 172 int win = DoGetActiveWindow(); 173 174 if (win != 1) { 175 //Error_message(1); 176 }else { 177 //std::cout << "OKOK" << std::endl; 178 } 179 180 if (waitKey(0) == 1) break; //push anything key 181 182 } 183 184 return 0; 185 186}

ソリューション構成はRelease
ソリューションプラットフォームは×64

エラーの内容は
「例外がスローされました。0×00007FFE3A0260DB(ucrtbased.dll)で例外がスローされました。(Conndole.exe内): 0xC0000005: 場所 0xFFFFFFFFFFFFFFFFの読み取り中にアクセス違反が発生しました」
になります。

イメージ説明

rem.jpgはこのディレクトリにあることを確認しました。

ソリューション構成 Debug
ソリューションプラットフォーム x64
の場合のエラーも載せておきます。

Releaseの時と違うのは、コンソールに

OpenCV(4.0.0-rc) Error: Assertion failed ((depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2) in cv::matchTemplate, file c:\build\master_winpack-build-win64-vc15\opencv\modules\imgproc\src\templmatch.cpp, line 1107

というエラーが出てきたことと、
以下の画像のエラーメッセージになりました。
イメージ説明

このエラーの解決方法をわかる方がいれば、教えてください。
また、解決する際に必要な情報がほかにありましたら教えてください。
よろしくお願いいたします。

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

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

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

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

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

kazto

2018/11/24 07:37

エラーの内容はアクセス違反を示しており、質問者様が示した行とは無関係に見受けられます。公開できる範囲でなるべく漏らさず、ソースコードと、エラーメッセージの全てを追記お願いします。
minimize

2018/11/24 08:31

ご指摘ありがとうございます。今全部のソースコードとエラーメッセージの画像を追加しました。このほかに必要そうな情報はありますでしょうか?
kazto

2018/11/24 09:17

Debugビルドして実行することは可能でしょうか。もう少し原因が絞り込みやすくなると思います。
minimize

2018/11/25 03:24

遅くなってしまい申し訳ございません。昨日は実行できなかったので、本日になってしまいました。Debugビルドのエラーを追加しました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

http://opencv.jp/opencv-2svn/cpp/imgproc_object_detection.html

matchTemplateに渡す画像は1chのものに限られます。
Pursuit関数内でimg、temp_imgをそれぞれcvtColorで変換する必要があります。

投稿2018/11/25 05:18

kazto

総合スコア7196

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

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

minimize

2018/11/25 08:01

ありがとうございました!!変更してみたところ、表示できました! 助かりました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問