opencv 2 のピクセルにスマートな方法でアクセスしたかったのです。そのために、次のピクセル構造を定義しました。
struct mypixels
{
unsigned char red;
unsigned char green;
unsigned char blue;
};
今、私は次のことを試しましたが、うまくいきます:
int sz[3] = {2,2};
cv::Mat XL(2,sz, CV_8UC3, cv::Scalar::all(0));
cv::Mat_<cv::Vec3b> pixiter = XL;
pixiter.at<mypixels>(0,0).green = 22;
このコードはリリース モードでは問題なく動作しますが、デバッグ モードではアクセス違反エラーが発生します。opencv クラスをハッキングしたり、書き直したりしたくありませんでした。このコードをリリースおよびデバッグ モードで機能させるにはどうすればよいかを理解したいだけです。ここに書かれているようにピクセルを定義する必要があるかもしれないと思いました: http://docs.opencv.org/trunk/modules/core/doc/basic_structures.html#datatype しかし、どのように、または何をすべきか理解できませんでしたここ。多分ここにもっと知っている人がいます。
- 編集 -
user2151446 の実用的な解決策といくつかの追加の頭脳の力で、私はこの解決策にたどり着きました:
template<> class cv::DataType<mypixels>
{
public:
typedef mypixels value_type;
typedef int work_type;
typedef unsigned char channel_type;
typedef value_type vec_type;
enum { depth = CV_8U, channels = 3,
type = CV_MAKETYPE(depth, channels), fmt=(int)'u' };
};