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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

OpenCV

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

C++

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

Q&A

1回答

2386閲覧

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

kodai0505

総合スコア8

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

OpenCV

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

C++

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

0グッド

0クリップ

投稿2021/07/20 05:14

前提・実現したいこと

環境は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++

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

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

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

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

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

jbpb0

2021/07/20 10: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 11:31

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

回答1

0

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

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

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

undefined reference to...

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

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

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

投稿2021/07/26 06:51

jbpb0

総合スコア7651

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問