繁体   English   中英

在OpenCV中未正确设置像素

[英]Pixels Not Set Properly In OpenCV

我正在尝试制作一个完全黑色的图像,但图像中心处的白色矩形除外。 但是,在第一次尝试时,我得到了一个奇怪的结果,所以我更改了代码以查明问题所在。

因此,对于for循环,我尝试将中心的所有水平像素设置为白色,以在图像上绘制一条白线。 下面是我的代码。

//--Block Mask--//
block_mask = cv::Mat::zeros(image_height, image_width, CV_8UC3);

int img_height = block_mask.rows;
int img_width = block_mask.cols;

for (int row = (img_height / 2); row < ((img_height / 2) + 1); row++)
{
    for (int column = 0; column < img_width; column++)
    {
        block_mask.at<uchar>(row, column) = 255;
    }
}

cv::namedWindow("Block Mask", CV_WINDOW_AUTOSIZE);
cv::imshow("Block Mask", block_mask);

img_height = 1080
img_width = 1920

image_height and image_width are defined from another image.

使用此代码,我希望看到在整个图像上绘制一条白线,但是,白线仅在整个图像上延伸了一部分。 参见下图。 水平白线

为了进行故障排除,我制作了一个变量以计算内部for循环的迭代次数,它的计数达到了我期望的1920 这让我想知道是否与显示的图像有关? 当简单地将单个像素(不是循环地)设置为行到达的白色后,也看不到任何结果。

我对这里发生的事情不知所措,因此,将不胜感激任何帮助或实现此目的的更好方法。

已解决:图像block_mask是一个三通道BGR图像,因为它是使用CV_8UC3类型CV_8UC3 但是,将像素值设置为白色时,将使用uchar类型。 此外,将其设置为值255的信号整数类型。

为了正确设置每个像素的颜色,必须设置所有三个通道。 这可以通过使用cv::Vec3b类型变量来实现,该变量包含每个通道的值并且可以单独设置。 这可以通过以下方式完成:

cv::Vec3b new_pixel_colour;
new_pixel_colour[0] = 255;    //Blue channel
new_pixel_colour[1] = 255;    //Green channel
new_pixel_colour[2] = 255;    //Red channel

从这里,像素可与此变量被分配到改变它们的颜色,确保在更改类型.at操作者cv::Vec3b也。 更正后的代码如下。

//--Block Mask--//
block_mask = cv::Mat::zeros(image_height, image_width, CV_8UC3);

cv::Vec3b new_pixel_colour;
new_pixel_colour[0] = 255;    //Blue channel
new_pixel_colour[1] = 255;    //Green channel
new_pixel_colour[2] = 255;    //Red channel

int img_height = block_mask.rows;
int img_width = block_mask.cols;

for (int row = (img_height / 2); row < ((img_height / 2) + 1); row++)
{
    for (int column = 0; column < img_width; column++)
    {
        block_mask.at<cv::Vec3b>(row, column) = new_pixel_colour;
    }
}

cv::namedWindow("Block Mask", CV_WINDOW_AUTOSIZE);
cv::imshow("Block Mask", block_mask);

另一种绘图解决方案是使用OpenCV的内置绘图功能。 具体来说,要绘制矩形,可以使用OpenCV函数cv::rectangle() 可以在以下位置找到有关OpenCV中基本绘图的教程: https : //docs.opencv.org/master/d3/d96/tutorial_basic_geometric_drawing.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM