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
显示错误。任何人都可以帮助我吗?
答案 0 :(得分:2)
你需要:
#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...
}
}
答案 1 :(得分:0)
由于您可能正在处理图像,我认为img_V
是cv::Mat
。根据最新的documentation,cv::Mat::row(int y)
会返回另一个cv::Mat
。但是没有任何默认转换为uint8_t
或uchar
。
但是,如果要将指针添加到图像的特定行,则应使用cv::Mat::ptr(int i0)
,它返回uchar *
或任何其他类型指针如果您使用其模板版本。
但是你需要一个uint8_t指针,你首先要像Miki所说的那样做,#include <csdtint>
。