我想以某种聪明的方式访问我在 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' };
};