这取决于您的图像的频道。垫子有方法channels
。它返回通道数 -如果图像是灰色的,则返回一个,如果图像是彩色的,则返回三个(例如,RGB - 每个颜色分量一个通道)。
所以你必须做这样的事情:
if (outputFrame.channels() == 1) //image is grayscale - so you can use uchar (1 byte) for each pixel
{
//...
if (outputFrame.at<uchar>(x,y) == 255)
{
//do a check if this pixel is the most left, or the most right, or the most top, or the most bottom (this is needed to construct result rectangle)
}
}
else
if (outputFrame.channels() == 3) //image is color, so type of each pixel if Vec3b
{
//...
// white color is when all values (R, G and B) are 255
if (outputFrame.at<Vec3b>(x,y)[0] == 255 && outputFrame.at<Vec3b>(x,y)[1] == 255 && outputFrame.at<Vec3b>(x,y)[2] == 255)
{
//do a check if this pixel is the most left, or the most right, or the most top, or the most bottom (this is needed to construct result rectangle)
}
}
但实际上要获得包含图像上所有白色像素的矩形,您可以使用另一种技术:
- 将图像转换为灰度。
- 使用值 254(或接近 255)作为参数执行阈值。
- 找到图像上的所有轮廓。
- 构造一个包含所有这些轮廓的轮廓(只需将每个轮廓的所有点添加到一个大轮廓中)。
- 使用边界矩形功能找到您需要的矩形。