gpt4 book ai didi

c++ - 像素修改不覆盖整个图像

转载 作者:太空宇宙 更新时间:2023-11-03 22:01:22 27 4
gpt4 key购买 nike

我一直在做一些 opencv 和图像处理方面的工作。每隔一段时间我都会遇到这样的情况,当我尝试像这里一样手动进行一些像素修改时:

cv::Mat newImg = cv::Mat::zeros(img.size(), img.type());

for( int y = 0; y < img.rows; y++ )
{
for( int x = 0; x < img.cols; x++ )
{
cv::Vec3b intensity = img.at<cv::Vec3b>(y, x);
r = intensity.val[0];
g = intensity.val[1];
b = intensity.val[2];

intensity.val[0] = r - (r * modify - r);
intensity.val[1] = g - (g * modify - g);
intensity.val[2] = b - (b * modify - b);

newImg.at<cv::Vec3b>(y, x) = intensity;
}
}

这会产生一个像这样有黑框的新图像

enter image description here

现在我只是不明白为什么 for 循环没有覆盖整张照片,我之前设法解决了这个问题,但纯属运气,但仍然不明白这个问题的原因和来源。

所以我的问题简而言之是:如何从我的图像中删除这个黑框?

谢谢

最佳答案

导致此问题的最常见原因是您正在访问具有错误元素类型的图像。您使用 .at<cv::Vec3b>(y,x)用于像素访问。这假设图像只有 BGR channel 。您的图像数据可能是 BGRA 格式,特别是因为这是 iOS 的 native 图像格式。

要解决您的问题,请更改 cv::Vec3b 的所有实例与 cv::Vec4b ,代码应该可以正常工作。

关于c++ - 像素修改不覆盖整个图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17660905/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com