错误:标识符 <uint8_t> 未定义,是不是可以在 openCV 中使用
Posted
技术标签:
【中文标题】错误:标识符 <uint8_t> 未定义,是不是可以在 openCV 中使用【英文标题】:Error: identifier <uint8_t> undefined and is it possible to use at openCV错误:标识符 <uint8_t> 未定义,是否可以在 openCV 中使用 【发布时间】:2016-05-04 12:17:32 【问题描述】:考虑:
int cn = img_V.channels();
Scalar_<unit8_t> bgrPixel;
for (int i = 0; i < img_V.rows; i++)
uint8_t* rowPtr = img_V.row(i);
for (int j = 0; j < img_V.cols; j++)
bgrPixel.val[0] = rowPtr[j*cn + 0]; // B
bgrPixel.val[1] = rowPtr[j*cn + 1]; // G
bgrPixel.val[2] = rowPtr[j*cn + 2]; // R
// Do something with BGR values...
我正在使用 Visual Studio 和 OpenCV,但它无法识别 uint8_t
显示错误。我该如何解决这个问题?
【问题讨论】:
unknown type name 'uint8_t', MinGW的可能重复 为什么顺序相反,BGR?为什么不是标准顺序,RGB? @PeterMortensen:这是 OpenCV 所做的许多愚蠢的事情之一。这似乎是一个简单的选择,以正确的顺序存储 RGB 值,但不是...... :) 【参考方案1】:你需要添加
#include <cstdint>
见uint8_t
。
但是请注意,在 OpenCV 中您应该使用 uchar
。
另外请注意,您没有正确循环。 正确的做法是:
for (int i = 0; i < img_V.rows; i++)
Vec3b* rowPtr = img_V.ptr<Vec3b>(i);
for (int j = 0; j < img_V.cols; j++)
Vec3b& bgrPixel = rowPtr[j];
// Do something with BGR values...
【讨论】:
感谢图书馆的建议。 :D 但如果我想使用您的循环系统,那么如何显示像素值? :)bgrPixel
将包含每个像素的值。要显示该值,您可以 cout << bgrPixel;
,或访问每个通道:cout << "B:" << int(bgrPixel[0]) << " G: " << int(bgrPixel[1]) << " R: " << int(bgrPixel[2]);
非常感谢。这就是我想要的:)【参考方案2】:
由于您可能正在处理图像,我想img_V
是cv::Mat
。根据最新的documentation,cv::Mat::row(int y)
返回另一个cv::Mat
。但是没有任何默认转换为uint8_t
或uchar
。
然而,如果你想获得一个指向图像特定行的指针,你应该使用cv::Mat::ptr(int i0)
,它返回一个uchar *
,或者任何其他类型的指针,如果你使用它模板版本。
但是你想要一个 uint8_t 指针,你首先需要按照三木说的做,然后#include <csdtint>
。
【讨论】:
以上是关于错误:标识符 <uint8_t> 未定义,是不是可以在 openCV 中使用的主要内容,如果未能解决你的问题,请参考以下文章
将 std::vector<uint8_t> 转换为 QImage