错误:标识符 <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 &lt;&lt; bgrPixel; ,或访问每个通道:cout &lt;&lt; "B:" &lt;&lt; int(bgrPixel[0]) &lt;&lt; " G: " &lt;&lt; int(bgrPixel[1]) &lt;&lt; " R: " &lt;&lt; int(bgrPixel[2]); 非常感谢。这就是我想要的:)【参考方案2】:

由于您可能正在处理图像,我想img_Vcv::Mat。根据最新的documentation,cv::Mat::row(int y) 返回另一个cv::Mat。但是没有任何默认转换为uint8_tuchar

然而,如果你想获得一个指向图像特定行的指针,你应该使用cv::Mat::ptr(int i0),它返回一个uchar *,或者任何其他类型的指针,如果你使用它模板版本。

但是你想要一个 uint8_t 指针,你首先需要按照三木说的做,然后#include &lt;csdtint&gt;

【讨论】:

以上是关于错误:标识符 <uint8_t> 未定义,是不是可以在 openCV 中使用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Waypoints 错误“未定义通知”

未捕获的引用错误,未定义通知

uint8_t向量的内存地址

将 std::vector<uint8_t> 转换为 QImage

在 C++ 中将 const vector<uint8_t> 转换/转换为 const vector<char>

OpenSSL DER ECDSA 编码错误