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

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

ただいまの
回答率

90.47%

  • C++

    4522questions

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

  • OpenCV

    1557questions

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

  • Visual Studio 2013

    320questions

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

  • CMake

    94questions

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

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

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 14K+

culuculu

score 44

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

#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"

#define X_SIZE 1920
#define Y_SIZE 1080

using namespace std;
using namespace cv;

cv::Mat img;

int main(int argc, char *argv[])
{
    img = imread("image/face1.jpeg", 1);
    if (img.data == NULL)
        return -1;

    imwrite("image/face1-1.jpeg", img);

    return 0;
}


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

その他のサイトを見ると、LNK(リンカエラー)は対応するライブラリが追加されていないことを示している。
と書かれてありましたが、ライブラリにはスタティックライブラリ、ダイナミックライブラリ、.NETのクラスライブラリの3種類があり、一般的なのがダイナミックライブラリでそれには、
1. ダイナミックリンクライブラリファイル(*.dll)
2. ライブラリファイル(*.lib) 

  1. ヘッダファイル(インクルードファイル)(*.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


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • culuculu

    2016/10/26 14:22

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

    キャンセル

  • yuki23

    2016/10/26 23:56

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

    キャンセル

  • culuculu

    2016/10/27 09:23

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

    キャンセル

回答 2

checkベストアンサー

+1

こんにちは。

「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 12:14 編集

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

    キャンセル

  • 2016/10/26 14:51 編集

    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で保存しておきました。

    キャンセル

  • 2016/10/26 15:06

    なんか変ですね。
    まず、通常はUTF-8を使いますので、一旦UTF-8で進めましょう。
    そもそもどのファイルに対してC4819が出てますか?

    もしもそれが質問に記載されているソースでしたら、そもそもC4819がでることが可笑しいので、どこかにこっそり全角スペース等が入っているかもしれません。それを削除して下さい。

    文字コードが間違っているとコンパイラがソースを正しく解釈できないため、と他の問題を追いかけても仕方がないです。

    キャンセル

  • 2016/10/26 15: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行目も最初の文字が+なので...

    キャンセル

  • 2016/10/26 15:26 編集

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

    キャンセル

  • 2016/10/26 17:11 編集

    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をかたっばしからリンク指定するのも手ですが、多重定義等のエラーが出るかもしれません。

    キャンセル

  • 2016/10/27 10:42 編集

    すみません。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はありました。「管理者として実行」をしてみても何も起こりませんでした。

    対処法を教えていただけないでしょうか?

    キャンセル

  • 2016/10/27 11:13

    > すみません。OpenCVを使っていることを明記していませんでした。

    OpenCVのバージョンが問題になる可能性も考慮下さいね。
    お使いのバージョン書いてないですよ。

    > ヘッダーファイルも保存変更が必要と思いつきませんでした。

    他から入手したソースを修正すると、それがバージョンアップされた時面倒なのであまりしない方がよいのですが、今回は仕方ないかも。

    キャンセル

  • 2016/10/27 12:06

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

    キャンセル

  • 2016/10/27 12: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)」の選択をミスしやすいので注意しつつ、再度下記設定を確認して見て下さい。
    ①インクルード・パス設定
    ②ライブラリ・パス設定
    ③ライブラリ指定
    指定したフォルダやライブラリ・ファイルは間違いなく存在していますか?

    キャンセル

  • 2016/10/27 15:29 編集

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

    キャンセル

  • 2016/10/27 18:50 編集

    ここまで教えてもらい、今になってと思いますが、ここまでエラーで詰まるのは元々の設定が甘いと思い、以下のサイトを参考に進めてみました。
    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;
    }
    --->

    キャンセル

  • 2016/10/27 21: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用にある程度プリビルド版が用意されていますので、再挑戦する際は、プリビルド版の使用をお勧めします。

    キャンセル

  • 2016/10/27 21:45

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

    キャンセル

  • 2016/10/27 22:05

    うんうん。

    キャンセル

  • 2016/10/29 06:04 編集

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

    キャンセル

  • 2018/11/22 16:26

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

    キャンセル

  • 2018/12/04 14:42

    お役に立てて何よりです!

    ご教授頂いた方々、有難うございました。

    キャンセル

+1

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/29 06:14 編集

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

    キャンセル

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

  • ただいまの回答率 90.47%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • C++

    4522questions

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

  • OpenCV

    1557questions

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

  • Visual Studio 2013

    320questions

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

  • CMake

    94questions

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

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