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

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

ただいまの
回答率

87.81%

Google Colabで写真を表示させたい(C++,Opencv)

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 82

score 0

前提・実現したいこと

環境はgoogle colab、言語はC++、ライブラリはopencvを使って写真を表示するプログラムを作ったのですが、実行する部分でエラーが返されました。素人質問で申し訳ございませんがご教授頂けると幸いです。プログラムは「詳解OpenCV3」の本を参考にしています。

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

/tmp/ccyZIjpi.o: In function main': 2-1.cpp:(.text+0x11e): undefined reference to cv::imread(cv::String const&, int)'
2-1.cpp:(.text+0x171): undefined reference to cv::namedWindow(cv::String const&, int)' 2-1.cpp:(.text+0x1c5): undefined reference to cv::imshow(cv::String const&, cv::_InputArray const&)'
2-1.cpp:(.text+0x1ed): undefined reference to cv::waitKey(int)' 2-1.cpp:(.text+0x212): undefined reference to cv::destroyWindow(cv::String const&)'
/tmp/ccyZIjpi.o: In function cv::String::String(char const*)': 2-1.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x4d): undefined reference to cv::String::allocate(unsigned long)'
/tmp/ccyZIjpi.o: In function cv::String::~String()': 2-1.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0x14): undefined reference to cv::String::deallocate()'
/tmp/ccyZIjpi.o: In function cv::String::operator=(cv::String const&)': 2-1.cpp:(.text._ZN2cv6StringaSERKS0_[_ZN2cv6StringaSERKS0_]+0x28): undefined reference to cv::String::deallocate()'
/tmp/ccyZIjpi.o: In function cv::Mat::~Mat()': 2-1.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x39): undefined reference to cv::fastFree(void*)'
/tmp/ccyZIjpi.o: In function cv::Mat::release()': 2-1.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x4b): undefined reference to cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status

/bin/bash: line 2: ./2-1: No such file or directory

CalledProcessError                        Traceback (most recent call last)
<ipython-input-8-1a8e66169d34> in <module>()
----> 1 get_ipython().run_cell_magic('shell', '', '\ng++ 2-1.cpp -o 2-1\n./2-1 0.jpg')

2 frames
/usr/local/lib/python3.7/dist-packages/google/colab/_system_commands.py in check_returncode(self)
137     if self.returncode:
138       raise subprocess.CalledProcessError(
--> 139           returncode=self.returncode, cmd=self.args, output=self.output)
140 
141   def _repr_pretty_(self, p, cycle):  # pylint:disable=unused-argument

CalledProcessError: Command '
g++ 2-1.cpp -o 2-1
./2-1 0.jpg' returned non-zero exit status 127.

該当のソースコード

%%writefile 2-1.cpp

include <opencv2/opencv.hpp>

void help(char** argv ) {
std::cout << "\n"
<< "A simple OpenCV program that loads and displays an image from disk\n"
<< argv[0] <<" <path/filename>\n"
<< "For example:\n"
<< argv[0] << " ../fruits.jpg\n"
<< std::endl;
}

int main( int argc, char** argv ) {

if (argc != 2) {
help(argv);
return 0;
}

cv::Mat img = cv::imread( argv[1], -1 );

if( img.empty() ) return -1;

cv::namedWindow( "Example 2-1", cv::WINDOW_AUTOSIZE );
cv::imshow( "Example 2-1", img );
cv::waitKey( 0 );
cv::destroyWindow( "Example 2-1" );

return 0;
}

from google.colab import files
uploaded_file = files.upload()

uploaded_file_name = next(iter(uploaded_file))
print(uploaded_file_name)

!ls -l

%%shell

g++ 2-1.cpp -o 2-1
./2-1 0.jpg

試したこと

特にありません。

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

環境:Google Colab
言語:Python
ライブラリ:C++

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • jbpb0

    2021/07/20 19:44 編集

    > g++ 2-1.cpp -o 2-1

    OpenCVのプログラムをコンパイルしてリンクする際は、「詳解OpenCV3」の24ページの下の「当然ですが...」に書かれてるように、コンパイルコマンドにいろいろオプションを付けて、インクルードファイルやライブラリファイルの場所や、どのライブラリファイルとリンクさせるかを、コンパイラに教えてあげる必要があります

    そうしないと、OpenCVのライブラリ(本体)が無いので、質問に書いてる

    > undefined reference to...

    のようなエラーになります


    では、コンパイルコマンドにオプションを付ければそれでいいのか、というと、必要なOpenCVのインクルードファイルやライブラリファイルが、そもそもgoogle colabに入ってるか、という問題があります

    私はgoogle colabをそういう使い方をしたことがないので詳細知りませんが、もしOpenCVのインクルードファイルやライブラリファイルが入ってないなら、aptとかで入れないといけません


    上記を全て乗り越えて、無事にコンパイルできたとしても、
    cv::imshow()
    のようなウインドウを開くような機能や、
    cv::waitKey()
    のようなキーボード入力を待つような機能は、たぶんgoogle colabでは使えないような気がします
    (やったことないので、気がするだけですが)

    キャンセル

  • kodai0505

    2021/07/20 20:31

    そもそもgoogle colabでは使えないんですね。
    ご教授頂き誠にありがとうございます。
    他の環境で試したいと思います。

    キャンセル

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

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

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

関連した質問

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