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

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

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

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenCV

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

C++

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

解決済

2回答

53115閲覧

「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」の警告を解消したいです。

culuculu

総合スコア52

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

OpenCV

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

C++

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

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2016/10/25 17:50

編集2016/10/27 00:29

現在、Visual Studioで以下のプログラムをビルドしようとしているのですが、
「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」
という警告が出てきており、うまくビルドできません。
他にもLNK2001:「外部シンボル未解決」というエラーもいくつか表示されていますが、まずC4819の警告を解消したいと考えています。

face_detection.cpp

1 2#include "stdafx.h" 3#include "stdio.h" 4#include "iostream" 5#include "opencv2/core.hpp" 6#include "opencv2/highgui.hpp" 7 8#define X_SIZE 1920 9#define Y_SIZE 1080 10 11using namespace std; 12using namespace cv; 13 14cv::Mat img; 15 16int main(int argc, char *argv[]) 17{ 18 img = imread("image/face1.jpeg", 1); 19 if (img.data == NULL) 20 return -1; 21 22 imwrite("image/face1-1.jpeg", img); 23 24 return 0; 25} 26

いくつかのサイトを参考にし、
・プログラム中の日本語コメントがCP932と認識されている原因の可能性があるため、削除する。
・ビルドする際にDebugからReleaseに変更する。
というような対処をしましたが、うまくいきませんでした。(エラーの数は減ったのですが...)

その他のサイトを見ると、LNK(リンカエラー)は対応するライブラリが追加されていないことを示している。
と書かれてありましたが、ライブラリにはスタティックライブラリ、ダイナミックライブラリ、.NETのクラスライブラリの3種類があり、一般的なのがダイナミックライブラリでそれには、
1. ダイナミックリンクライブラリファイル(.dll)
2. ライブラリファイル(
.lib)
3. ヘッダファイル(インクルードファイル)(*.h)
があることが書かれてありました。(参考url:
http://imagingsolution.blog107.fc2.com/blog-entry-231.html)
そのため、インクルードするヘッダーファイルに問題があるのでしょうか?

このエラーや警告の解消を試みている数時間前は「imread,imwriteの識別子が見つかりません。」
というエラーも表示されていました。
もしかしたらimread,imwrite関数を使えるようにするためのヘッダーファイルをインクルードしていない、もしくはヘッダーファイルをビルドしようとしているソースファイルのフォルダ内に入っていない。
という問題があるのかなと考えています。
しかし、どのようなヘッダーファイルを入れればいいのか、どのようにパス指定をすればいいのかわからないため、わかっていただける方にご教授願いたいと思います。
よろしくお願いします。


統合開発環境:Visual Studio Professional 2013
言語:C++
OS:Windows
画像認識のライブラリ:OpenCV(ver3.1.0)
自動化ツール:CMake


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

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

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

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

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

退会済みユーザー

退会済みユーザー

2016/10/26 00:31

エラーメッセージでググるといろいろでてきますが、やってみましたか?
culuculu

2016/10/26 03:09

いくつかのサイトを参考にして、プログラム中の日本語コメントがCP932と認識されている原因の可能性があるため削除したり、ビルドする際にDebugからReleaseに変更することを行なってみました。それでも対処できなかったのでもしかしたらググり方が間違っていたのかもしれません。検索する時、「LNK4819」という文字を入れて検索していたのですがもっといい検索方法がありますか?ググると色々出てきたらしいですが参考したいのでどのようなサイトがありましたか?
退会済みユーザー

退会済みユーザー

2016/10/26 04:09

ググって調べて関係のありそうな記事の対応を行ったが解決しなかったということであれば、その記事や質問者さんが行ったことを書いておいていただけると、回答者の方は考える範囲が狭まるので、そのようにお願いできればというのが先の私のコメントの趣旨です。今回はすでに Chironian さんが親切にググって調べておられますので、まずはその回答を見て対応することをお勧めします。
culuculu

2016/10/26 05:22

今後は、エラー対策を行なった上でできなかった場合は、何をどこまでしたかを書いておきます。回答者の立場になって考えていませんでした。
yuki23

2016/10/26 14:56

OpenCV についての質問のようですので、使用されている OpenCV のバージョンを記載してください。また、OpenCV のタグを付けることをおすすめします。逆に Windows 10 のタグは無関係と思われます。
culuculu

2016/10/27 00:23

OpenCVを使っていたことを記載していませんでした。後、ビルドの自動化ツールであるCMakeも用いています。
guest

回答2

0

ベストアンサー

こんにちは。

「C4819:ファイルは現在のコードページ(932)で表示できない文字を含んでいます。ファイルをUnicode形式で保存してください。」

この対策はVisual C++ 2010で生じる、warning C4819を退治するが詳しく載ってます。
C4819でググると2番目に出てくるサイトです。Visual Studioの場合は、エラー・コードで検索すると結構ヒントになるサイトがでてきますよ。それでもでてこない時はエラー・メッセージでググると良いです。

LNK2001:「外部シンボル未解決」

これはリンクする時に使った関数等のコードが見つからなかったと言うエラー・メッセージです。
大抵の場合、リンクしなければライブラリの指定漏れです。

もしかしたらimread,imwrite関数を使えるようにするためのヘッダーファイルをインクルードしていない、もしくはヘッダーファイルをビルドしようとしているソースファイルのフォルダ内に入っていない。

という問題があるのかなと考えています。

違います。ヘッダはコンパイル時に解釈されるソース・コードです。それが不足している時はコンパイル時にエラーがでます。
リンクまで進んでいる(エラー・コードがLNKで始まっているのでリンカがエラーを出してます)ということはコンパイルには通っています。

しかし、OpenCVはVisual Studio用には自動的に必要なライブラリをリンクしてくれます。
ということは、ビルドされていないOpenCVを使っているか、OpenCVのライブラリ・パスを指定しそこなっていると言うことです。

2. Visual Studioによる新規プロジェクト作成が参考になると思います。Visual Studioのバージョンがちょっと異なりますが、大差はないです。「2.4 ライブラリパス設定」の設定を確認下さい。

投稿2016/10/26 01:13

Chironian

総合スコア23272

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

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

culuculu

2016/10/26 03:17 編集

私の見えづらい文章を読んでいただきありがとうございます。 自分の疑問点を1つ1つ解答していただき、わかりやすいです。 上記のサイトも読んで理解し、対策に移します。 2. Visual Studioによる新規プロジェクト作成のサイトは読んでいたのですが、パス指定の行い方などが理解できなくて読み飛ばしていました。逃げずに考えます。
culuculu

2016/10/26 05:52 編集

Visual C++ 2010で生じる、warning C4819を退治する のサイトに書かれてある通りにやってみようとしました。 「ファイル」→「名前をつけて保存」→「エンコード付きで保存」をしたところUnicodeの種類が5つ程あり、全て試してみたところ「Unicode(UTF-7)-コードページ65000」だけが保存後にビルドしようとしたところ、エラー結果が変わりました。 エラーの数も減り、2つになりました。 エラー内容はC2059:構文エラー:”+”、C2059:”サフィックスが無効です”というエラーです。 2つ目のエラーは参考サイトが豊富で時間をかければ対処できそうな気がするのですが1つ目のエラーは参考サイトがなかなかありませんでした。"(","[","{",";",":"に関するサイトはたくさんあったのですが"+"は見つけられませんでした。 1つ目のエラー箇所はソースコードの1行目です。+が見当たらないので見当もつきませんでした。 2つ目は、20行目で imwrite("image/face1-1.jpeg",img); が原因らしいですが、サフィックスが無効とあるのでもしかしたら画像の拡張子の.jpegに問題があるのかなと考えています。 もし、1つ目のエラーに心当たりがあれば教えていただきたいと思います。 正直、「Unicode(UTF-7)-コードページ65000」で保存したのも正解なのか不安です。 上記のサイトではどの種類で保存するのか書かれてなかったので... 他のサイトではUnicode(UTF-8)を推奨していたっぽいですが、エラー結果が変わらなかったのでUnicode(UTF-7)-コードページ65000で保存しておきました。
Chironian

2016/10/26 06:06

なんか変ですね。 まず、通常はUTF-8を使いますので、一旦UTF-8で進めましょう。 そもそもどのファイルに対してC4819が出てますか? もしもそれが質問に記載されているソースでしたら、そもそもC4819がでることが可笑しいので、どこかにこっそり全角スペース等が入っているかもしれません。それを削除して下さい。 文字コードが間違っているとコンパイラがソースを正しく解釈できないため、と他の問題を追いかけても仕方がないです。
culuculu

2016/10/26 06:25

「Unicode(UTF-7)-コードページ65000」で保存した後、もう一度face_detection.cppを開くと文字化け?のようなものをしていました。 コードは以下のようになっています。 <--- +ACM-include +ACI-stdio.h+ACI- +ACM-include +ACI-stdafx.h+ACI- +ACM-include +ACI-iostream+ACI- +ACM-include +ACI-opencv2/core.hpp+ACI- +ACM-include +ACI-opencv2/highgui.hpp+ACI- +ACM-define X+AF8-SIZE 1920 +ACM-define Y+AF8-SIZE 1080 using namespace std+ADs- using namespace cv+ADs- int main() +AHs- Mat img+ADs- img +AD0- imread(+ACI-image/face1.jpeg+ACI-, 1)+ADs- if (img.data +AD0APQ- NULL) return -1+ADs- imwrite(+ACI-image/face1-1.jpeg+ACI-, img)+ADs- return 0+ADs- +AH0- ---> おそらくこの文字化けが原因だと思います。 1行目も最初の文字が+なので...
culuculu

2016/10/26 06:40 編集

UTF-8に保存し直して、全角スペースがないか確認します。 tabキーを全ての行に押したり、文末にスペースがないか調べたのですがありませんでした。
Chironian

2016/10/26 08:14 編集

OpenCVの3.0.0でやってみました。ビルドできることまで確認できました。 まず、C4819は質問文のソースではでず、OpenCVのファイルででしました。mat.hpp、persistence.hpp、utility.hppです。OpenCVのこれらのファイルについても「UTF-8シグネチャ付き」で保存すれば良いC4819は消えました。見る限りワイド文字は使われていないので、たぶん消さなくても不具合はでないだろうと思いますが、消しておいた方が安心ではあります。 次に、すいません、「OpenCVはVisual Studio用には自動的に必要なライブラリをリンクしてくれます。 」は間違いでした。(これは他のライブラリの話でした。) OpenCVは自動的にはリンクしてくれませんので、ライブラリを指定してリンクする必要が有ります。 OpenCV 3.0.0の場合は、上記のリンク先に書かれている手順でopencv_world300.libかopencv_world300d.libを設定します。リリース・ビルド時は前者、デバッグ・ビルド用には後者です。 coreとhighguiのみではだめでした。worldをリンクして下さい。 もし、OpenCVの2.4.xをお使いの場合は結構リンクするライブラリの指定は面倒です。libフォルダの*.libをかたっばしからリンク指定するのも手ですが、多重定義等のエラーが出るかもしれません。
culuculu

2016/10/27 02:00 編集

すみません。OpenCVを使っていることを明記していませんでした。 C4819は自身もmat.hpp、persistence.hpp、utility.hppの3つが警告要因のファイル名です。これらのヘッダーファイルを「UTF-8シグネチャ付き」で保存すると警告が消えました。ヘッダーファイルも保存変更が必要と思いつきませんでした。 そして、2. Visual Studioによる新規プロジェクト作成のサイトを参考に、coreとhighgui、worldのライブラリを追加したところエラーが7つあったのが3つまで減りました。 エラー内容は 1つが、LNK2001:外部シンボルは未解決です。というエラー文で原因ファイルはface_detection.objです。 2つ目が、LNK1120:2件の未解決の外部参照。というエラー文で原因ファイルはface_detection.exeです。 1つ目のLNK2001はライブラリの指定漏れかと思うのですが、coreとhighgui、worldのライブラリを追加した後でも出るエラーなのでもしかしたらうまく設定できてないのか、もしくは他のライブラリが必要なのかなと考えています。 2つ目は、エクスプローラーでローカルディスク内を検索してみたところface_detection.exeというファイルは無く、代わりにcpp-example-dpt_face_detection.exeはありました。「管理者として実行」をしてみても何も起こりませんでした。 対処法を教えていただけないでしょうか?
Chironian

2016/10/27 02:13

> すみません。OpenCVを使っていることを明記していませんでした。 OpenCVのバージョンが問題になる可能性も考慮下さいね。 お使いのバージョン書いてないですよ。 > ヘッダーファイルも保存変更が必要と思いつきませんでした。 他から入手したソースを修正すると、それがバージョンアップされた時面倒なのであまりしない方がよいのですが、今回は仕方ないかも。
culuculu

2016/10/27 03:06

OpenCVのバージョンは3.1.0です。
Chironian

2016/10/27 03:56

リンク先のサイトの「OpenCV 3.1におけるこれらのモジュールのライブラリ名をまとめたものが以下の表です。」との説明から、coreとhighguiを指定する必要はないように思います。 ところで、OpenCV 3.1.0をビルドしてお使いでしょうか? OpenCV 3.1.0のプリビルド版には64ビット・ビルドのライブラリのみ付属していました。プリビルド版を使う場合はアプリを64ビットでビルドする必要が有ります。 もしくは、OpenCVを32ビット・ビルドして使うことです。 この辺は適切に処理されていますでしょうか? ↓が参考になります。 https://msdn.microsoft.com/ja-jp/library/9yb4317s.aspx 今、OpenCV3.1.0のプリビルド版でビルドできることを確認しました。 リンク先サイトの説明通り設定すれば、何ら問題なくビルドできます。 Visual Studioのプロジェクトのプロパティの設定は、「構成(C)」の選択をミスしやすいので注意しつつ、再度下記設定を確認して見て下さい。 ①インクルード・パス設定 ②ライブラリ・パス設定 ③ライブラリ指定 指定したフォルダやライブラリ・ファイルは間違いなく存在していますか?
episteme

2016/10/27 06:29 編集

Webカメラから画像をキャプチャして表示する簡単なコードを Visual Studio 2015, OpenCV 3.1 で実装したんだけど、 なんの問題もなく一発OKでしたよ。 64bit に設定し, prebuilt lib: opencv_world310.lib をリンクしただけ。 # CP932 warning は無視。
culuculu

2016/10/27 09:57 編集

ここまで教えてもらい、今になってと思いますが、ここまでエラーで詰まるのは元々の設定が甘いと思い、以下のサイトを参考に進めてみました。 http://harapeko-kid.hungry.jp/opencv3-1-install 最後までの赤いウィンドウが表示されるまでうまくいきました。 しかし、ここからimread関数を使うとLNK2001のエラーが出てしまいます。 エラー内容は以下のようになります。 error LNK2001: 外部シンボル ""class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z)" は未解決です。 おそらくimread関数が使えるためのライブラリが不足しているのでは?と考えています。 しかし、調べてみてもどのヘッダーファイルなどを読み込めばいいかわかりません。 一応下記のヘッダーファイルはインクルードしています。 <--- #include "opencv2\opencv.hpp" #include "opencv2\core\core.hpp" #include "opencv2\highgui\highgui.hpp" #include "opencv2\imgcodecs\imgcodecs.hpp" #include "opencv2\imgproc\imgproc.hpp" int main(int argc, const char* argv[]) { cv::Mat img = cv::imread("lenna.png", 1); cv::namedWindow("image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); cv::imshow("image", img); //黒画像を用意 cv::Mat black(cv::Size(320, 240), CV_8UC3, cv::Scalar(0, 0, 0)); //ウィンドウを作成 cv::namedWindow("Black", cv::WINDOW_AUTOSIZE); //黒画像を表示 cv::imshow("Black", black); cv::waitKey(0); return 0; } --->
Chironian

2016/10/27 12:39

> ところで、OpenCV 3.1.0をビルドしてお使いでしょうか? > 指定したフォルダやライブラリ・ファイルは間違いなく存在していますか? なるほど、これらの質問に回答できないのですね。 基本的な質問ですから、この辺をきちんと理解していないと厳しいです。 下記サイトで解説してありましたのでよくご理解されてから、再挑戦することをお勧めします。 http://www.nitoyon.com/vc/tutorial/project/build_detail.htm http://blog.livedoor.jp/kaidouji85/archives/3119483.html また、http://harapeko-kid.hungry.jp/opencv3-1-installは主にOpenCVのビルド方法が記載されています。オープン・ソース・プロジェクトのビルドは初心者の方にはハードルが高いですから、現時点では避けることをお勧めします。 そして、OpenCVはVisual Studio用にある程度プリビルド版が用意されていますので、再挑戦する際は、プリビルド版の使用をお勧めします。
episteme

2016/10/27 12:45

ヘッダをどんだけ#includeしてもリンク・エラーの解決にはならんですよ。
culuculu

2016/10/28 21:40 編集

なんとかエラーは解消できました! しかし、エラーが頻繁に出ないように上記のサイトを勉強します。 サイトを教えてくださり、ありがとうございます。
oh_rusty_nail

2018/11/22 07:26

同じ現象が起きていて「Unicode (UTF-8 シグネチャ付き) - コードページ 65001」を選択して、期待通り警告が出なくなりました。 ありがとうございます。
culuculu

2018/12/04 05:42

お役に立てて何よりです! ご教授頂いた方々、有難うございました。
guest

0

error LNK2001: 外部シンボル ""class cv::Mat __cdecl cv::imread(class cv::String const &,int)" (?imread@cv@@YA?AVMat@1@ABVString@1@H@Z)" は未解決です。

http://harapeko-kid.hungry.jp/opencv3-1-install
上のページの通りにやったのであれば、リンクしたライブラリファイルが opencv_core310(d).lib と opencv_highgui310(d).lib の2つしか入れていないはずです。
imread, imwrite にはそれでは不足です。おそらく opencv_imgcodecs310(d).lib が必要です。
まだ足りなければ、lib フォルダに有る opencv_*.lib ファイルを全部入れてください(ただし Debug と Release を間違えないように注意)

なお、Visual Studio 2013 であれば、公式から配布されているプリビルド版が使えるので、わざわざ自分でビルドしなくても、
既に他の方が回答されているように opencv_world***.lib の一つだけで十分なはずです。

ちなみに老婆心ながら、C/C++ の基礎知識である、「リンクとは何か」も理解されていない(エラーメッセージの意味がわからない、ヘッダファイルとライブラリファイルの区別もついていない)ようですので、まずはそちらを先に勉強されることをおすすめします。でなければ、何度でも同じようなところでつまずくでしょう。
OpenCV は最初に学習されるライブラリとしては、少し複雑すぎると思います。

投稿2016/10/27 10:46

yuki23

総合スコア1448

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

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

culuculu

2016/10/28 21:39 編集

opencv_imgcodecs310(d).libを追加の依存ファイルに追加していませんでした。 その後、うまくいきました!ありがとうございます! リンク、ライブラリファイルについて勉強し直します。 デバッグで毎回躓いているので...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問