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

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

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

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

OpenCV

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

C++

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

Q&A

解決済

1回答

2349閲覧

OpenCV4.8.0、imread関数とimshow関数を用いて画像の出力をするときに起きるエラーの解決方法

Shami

総合スコア1

Visual Studio

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

OpenCV

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

C++

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

0グッド

0クリップ

投稿2023/09/28 10:30

実現したいこと

OpenCVをVisual Studio 2022でC++を用いて使用し、画像を読み込み、読み込んだものを出力する。

前提

windows11です。
OpenCVの動作確認のために、imshow関数で空のwindowを出力させることには成功しています。

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

新しくフォルダを作る前

1.visual studio内で表示されたもの

ハンドルされない例外が 0x00007FF9A9BB531C で発生しました (ConsoleApplication1.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0000005F26EFF050)。

2.別ウィンドウがポップして表示されたもの

[ WARN:0@0.059] global loadsave.cpp:248 cv::findDecoder imread_(''): can't open/read file: check file path/integrity
OpenCV(4.8.0) Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\GHA-OCV-1_work\ci-gha-workflow\ci-gha-workflow\opencv\modules\highgui\src\window.cpp, line 971

フォルダを作り直した後
1.visual studio内で表示されたもの

ハンドルされない例外が 0x00007FF9A9BB531C で発生しました (ConsoleApplication1.exe 内): Microsoft C++ の例外: cv::Exception (メモリの場所 0x0000006EC694F1C0)。

2.別ウィンドウがポップして表示されたもの

[ WARN:0@0.066] global loadsave.cpp:248 cv::findDecoder imread_(''): can't open/read file: check file path/integrity
OpenCV(4.8.0) Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\GHA-OCV-1_work\ci-gha-workflow\ci-gha-workflow\opencv\modules\highgui\src\window.cpp, line 971

該当のソースコード

新しくフォルダを作る前
#include<iostream>
#include <opencv2/opencv.hpp>

int main(int argc , const char * argv[])
{
cv::Mat img;

img =cv::imread("C:\Users\(略)\Desktop\sake.png");

cv::imshow("test", img);
cv::waitKey(10000);

return 0;
}

フォルダを作り直した後
#include<iostream>
#include <opencv2/opencv.hpp>

int main(int argc , const char * argv[])
{
cv::Mat img;

img =cv::imread("C:\picture\sake.png");

cv::imshow("test", img);
cv::waitKey(10000);

return 0;
}

試したこと

 imread関数を使って画像を読み込むときに画像のパスを「"C:\Users~.png"」のようにフルで入力すると、UsersのUより後ろに赤の波線が表示されてしまい、ユニバーサル文字名が正しくない(エラーコードE0965)と表示されてしまいます。そのコードを検索して\が1つだといけないのかと思い2つにしたところ波線は消え、ビルドした結果も問題はありませんでした。
しかしいざデバックしてみると、ハンドルされていない例外が発生したとエラーがでてうまく画像が表示されません。
そこでフォルダの名前が「ユーザー」とカタカナなのがだめなのかと思い、新しくpictureとフォルダを作り、そこに読み込みたい写真をいれました。
結果としては、まず\が1つでも赤の波線が表示されなくなりました。しかしデバックをすると、ハンドルされない例外が発生したとエラーが出てしまいました。
ここでフォルダ名は関係ないのだなと思い他の画像で試したのですがそれでも同じエラーがでてしまいました。
現在何が間違っているのか一切わからず万策尽きた状態です。

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

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

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

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

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

hoshi-takanori

2023/09/28 10:40

C++ の文字列中に \ を含める場合は、必ず \\ 都する必要があります。
fana

2023/09/28 10:56 編集

とりあえず「ハンドルされていない例外」の方は,画像が読込めていない(imgが空っぽなままである)のに,それを imshow() で表示させようとしたがために出ているものなので, 問題の本質は,画像を読込めていないことです. (読込処理の直後に,img.empty() の値を見ての正否判定くらいは入れるべきでしょう) まぁ,パスの問題であろうと思えます. 最初はワーキングディレクトリ直下に画像ファイルを置いて,コードからは画像ファイル名だけを指定するような形から試してみてはいかがでしょうか. (あと,ライブラリのDebug版とRelease版を間違って使ってたりしないか? とか.OpenCVの場合,ここをうっかり間違っていると画像読込とか保存のあたりでクラッシュしてたような気がします)
Shami

2023/09/28 11:10

どうやらそのDebug版とRelease版を間違えていた、というのとパスに問題がありうまく読み込めてなかったです。 Release版にして、他の画像を入力したところうまく読み込むことができ無事出力されました。 必ず\\にする必要があることと、成否判定をいれると良いというアドバイスもありがとうございます。
guest

回答1

0

自己解決

ライブラリがDebug版になっているのをRelease版に変更。
\を2つつけて入力する。

投稿2023/09/28 11:17

Shami

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問