開発環境
OS windows10
visual studio 2017 c++
opencv3.4.1
float型のmatのある座標へ値を代入したいのですが,構文エラーでデバックできません.
コードのどこが間違っているのか,教えて頂きたいです.
宜しくお願いします.
opencvのmatへのアクセスについて
Re: opencvのmatへのアクセスについて
Matクラスのインスタンスにはちょうど画素一個分のデータが格納されるわけですが、このデータの格納方法にはいろいろ種類があります。例えば白黒画像の画素だったら濃淡の情報だけあればいいわけですから1バイトで済むのに対し、カラー画像の画素だったらR,G,Bの三つの成分を保持するため3バイト必要になる、などです。そんなわけで、atメソッドを使うときには「画素情報がどのような形式で格納されているのか」をテンプレートに入力してやる必要があります。
この格納形式はいつ決定されるのかというと、Matクラスのインスタンスを宣言した時です。つまりここです。 CV_32FCというのは、「三つチャンネルがあり、一つのチャンネルはfloat型変数一つで表される(つまり画素一個はfloat型変数三つ分のデータを保持している)」という意味になります。ここを と書いてしまうと、「この画素はfloat型変数『一つのみ』で表される」という意味になってしまいます。
より細かい話をすると、直接的なエラーの原因は
です。画素情報が変数一つ分のみで表される(つまりチャンネルが一つしか存在しない)ときにはatメソッドから帰ってくるのは配列ではなくその変数そのものなので、上のコードは配列ではないただの値を配列のようにインデックスをつけて扱っていることになります。
よって、ここは「float型変数『三つ』で表される」と書く必要があるわけです。そのためにはこうすればよいです。 参考:
https://minus9d.hatenablog.com/entry/20 ... 1359194404
http://www.wakayama-u.ac.jp/~chen/cmake ... penCV.html
この格納形式はいつ決定されるのかというと、Matクラスのインスタンスを宣言した時です。つまりここです。 CV_32FCというのは、「三つチャンネルがあり、一つのチャンネルはfloat型変数一つで表される(つまり画素一個はfloat型変数三つ分のデータを保持している)」という意味になります。ここを と書いてしまうと、「この画素はfloat型変数『一つのみ』で表される」という意味になってしまいます。
より細かい話をすると、直接的なエラーの原因は
です。画素情報が変数一つ分のみで表される(つまりチャンネルが一つしか存在しない)ときにはatメソッドから帰ってくるのは配列ではなくその変数そのものなので、上のコードは配列ではないただの値を配列のようにインデックスをつけて扱っていることになります。
よって、ここは「float型変数『三つ』で表される」と書く必要があるわけです。そのためにはこうすればよいです。 参考:
https://minus9d.hatenablog.com/entry/20 ... 1359194404
http://www.wakayama-u.ac.jp/~chen/cmake ... penCV.html
Re: opencvのmatへのアクセスについて
ご指摘の箇所を修正したところ問題なくデバック出来ました.
説明がとても分かりやすく,すんなりと納得することが出来ました.
有難うございます.
説明がとても分かりやすく,すんなりと納得することが出来ました.
有難うございます.