gpt4 book ai didi

c++ - 非静态成员引用

转载 作者:太空宇宙 更新时间:2023-11-03 23:00:20 24 4
gpt4 key购买 nike

我的以下代码有一个错误:-

int main() {

cv::Mat image = imread("file.jpg", CV_LOAD_IMAGE_GRAYSCALE);
uint8_t* pixelPtr = (uint8_t*)image.data;
int cn = image.channels();
for(int i = 0; i < image.rows; i++)
{
for(int j = 0; j < image.cols; j += cn)
{
typedef Scalar_<uint8_t> bgrPixel;
bgrPixel.val[0] = pixelPtr[i*image.cols*cn + j*cn + 0]; // B
bgrPixel.val[1] = pixelPtr[i*image.cols*cn + j*cn + 1]; // G
bgrPixel.val[2] = pixelPtr[i*image.cols*cn + j*cn + 2]; // R

// do somethin
}
}
}

VS10 对 val[0] 下划线并表示非静态成员引用必须相对于特定对象。但它是 - 它与 bgrPixel 相关,不是吗?

最佳答案

更长的解释:

下面一行:

typedef Scalar_<uint8_t> bgrPixel;

声明别名 - brgPixel - 可以用来代替 Scalar_<uint8_t> - 它真的只是节省了打字时间,并使代码更简洁、更易于阅读。此外 - 在其他情况下 - 它允许您通过修改 typedef 来更改该类型而不是对变量类型 iteself 进行查找/替换。

它不做的是声明该类型的任何变量。

因此,您可以删除 typedef并声明一个变量:

Scalar_<uint8_t> bgrPixel;
bgrPixel.val[0] = pixelPtr[i*image.cols*cn + j*cn + 0];

或者,您可以使用 typedef作为变量类型:

typedef Scalar_<uint8_t> bgrPixel;
bgrPixel pPixel;
pPixel.val[0] = pixelPtr[i*image.cols*cn + j*cn + 0];

关于c++ - 非静态成员引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19763315/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com