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

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

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

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

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

Q&A

解決済

1回答

4558閲覧

opencvによる画素値の取得時のエラー

InverseK

総合スコア9

OpenCV

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

C++

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

0グッド

0クリップ

投稿2018/07/23 13:03

編集2018/07/23 13:29

前提・実現したいこと

環境:ubuntu16.04
言語:C++
ライブラリ:opencv

画素値を取得しプリントするようなプログラムを作成したいと思っておりますが、以下のようなプログラムをネットを参考にしながら作成し実行した結果segmentation faultとなってしまいました。
どなたかアドバイスや代替案などをいただけると幸いです。

コンパイル方法は以下のようにしました。
g++ hoge.cpp -o hoge pkg-config --libs --cflags opencv
実行
./hoge

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

segmentation fault

該当のソースコード

C++

1#include <stdio.h> 2// opencvの処理を使いますと宣言 3#include "opencv.hpp" 4 5// cvという苗字を省略しますと宣言 6using namespace cv; 7// stdという苗字を省略しますと宣言 8using namespace std; 9 10// プログラムの処理はmainから始まる 11int main() 12{ 13 // 画像を読み込む プロジェクトフォルダにコピーしたlena.jpgを参照 14 Mat testImage = imread("lena.jpg", 1); // カラーで読み込む 15 16 // 画像の座標(0,0)の画素値を取得する 17 Vec3b pix = testImage.at<Vec3b>(Point(0, 0)); 18 19 // 画素値はBGRの順に格納されている 20 cout << (int)pix[0] << "," << (int)pix[1] << "," << (int)pix[2] << endl; 21 22 printf("%d\n", pix[0]); 23 return 0; 24} 25

試したこと

ここに問題に対して試したことを記載してください。

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

opencv 2.4.13

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

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

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

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

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

guest

回答1

0

ベストアンサー

https://docs.opencv.org/2.4/doc/user_guide/ug_mat.html

Vec3bの要素へのアクセス方法が違います。

C++

1Vec3b intensity = img.at<Vec3b>(y, x); 2uchar blue = intensity.val[0]; 3uchar green = intensity.val[1]; 4uchar red = intensity.val[2];

投稿2018/07/23 13:50

kazto

総合スコア7196

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

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

InverseK

2018/07/23 14:25

回答ありがとうございます。 お恥ずかしながら、問題はjpegの拡張子の脱字だったようです。 お手数おかけしてすみませんでした。 また回答をもとに以下のように改良したところこちらも上手くいきましたことを報告いたします。 ### ソースコード ```C++ #include <stdio.h> // opencvの処理を使いますと宣言 #include "opencv.hpp" // cvという苗字を省略しますと宣言 using namespace cv; // stdという苗字を省略しますと宣言 using namespace std; // プログラムの処理はmainから始まる int main() { // 画像を読み込む プロジェクトフォルダにコピーしたlena.jpgを参照 Mat img = imread("lena.jpeg"); // 画像の座標(0,0)の画素値を取得する Vec3b intensity = img.at<Vec3b>(0, 0); uchar blue = intensity.val[0]; uchar green = intensity.val[1]; uchar red = intensity.val[2]; printf("%d\n", blue); return 0; } ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問