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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

Q&A

解決済

2回答

1685閲覧

Opencv 2値化画像のピクセル操作について

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

OpenCV

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

C++

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

0グッド

0クリップ

投稿2019/07/29 13:37

現在、カメラからの画像を2値化し、白のピクセルを塗りつぶすプログラムを作成しています。
そこでわからないのが、2値化画像のピクセル操作についてです。
BGR画像の操作の方法についてはネットに記事があるのですが、2値化画像の操作について
の記事は見つかりませんでした。
記事

以下がBGR画像の操作のサンプルです。

C++

1// 座標の設定 2int x = 0; 3int y = 0; 4// 画像の読み込み 5cv::Mat srcImg = cv::imread("sample.png"); 6// 値の取得 7// (0,0)が赤だった場合、BGRの順に"0,0,255"と出力される。 8cv::Vec3b bgr = srcImg.at<cv::Vec3b>(0,0); 9printf("%d,%d,%d\n",bgr[0],bgr[1],bgr[2]); 10// 値の設定 11// (0,0)にBGR順に255,0,0(青)を設定する。 12srcImg.at<cv::Vec3b>(0,0) = cv::Vec3b(255,0,0);

「Vec3b」というところを変更すればいいと思うのですが、どういった風に変更すればいいか分かりません。
初心者のため初歩的な質問で申し訳ありません。

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

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

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

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

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

guest

回答2

0

ベストアンサー

2値化した結果の画像のフォーマットが8bit1chであれば
unsigned charで良いです.

unsigned char &PixVal = BinarizedImg.at<unsigned char>( y,x );

投稿2019/07/30 01:07

fana

総合スコア11632

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

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

fana

2019/07/31 00:59

> 「Vec3b」というところを変更すればいいと思うのですが に対する端的な回答のつもりですが,何か間違ってますかね?>低評価
退会済みユーザー

退会済みユーザー

2019/07/31 05:17

回答ありがとうございます。 僕自身は分かりやすい回答をいただいたのでベストアンサーに させて頂こうと思ったところです。高評価をつけさせて頂きました。 低評価は僕ではありません。
fana

2019/07/31 05:41

お役に立てば幸いです. 回答では値の変更も可能なように unsigned char &PixVal としていますが,値を取得するだけでよければ unsigned char PixVal で良いでしょう. また,atではなくptrを使えば,要素を指すポインタが得られます. unsinged char *pPixVal = BinarizedImg.ptr<unsigned char>( y, x ); こっちだと ++pPixVal; で次の画素に進めたりができるので,範囲を走査する際等に便利.
guest

0

やりたいことがよく分からないのですが、
まず、二値化画像を設定する必要があると思います。

元データがカラー画像だとすると、まず、グレースケールにする必要があります。
読み込み時に行う方法としては、imread() の第2引数を 0(cv::IMREAD_GRAYSCALE) にするか、cvtColor() の第3引数を COLOR_RGB2GRAYにして変換します。

その後、Threshold() で二値化することになると思います。

内部データ (MAT)の扱いですが、cv::Matの概要辺りが参考になると思います。
(中を見ると、単なる配列)

投稿2019/07/29 14:56

pepperleaf

総合スコア6383

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問