【发布时间】:2020-05-19 13:52:15
【问题描述】:
我在 OpenCV C++ 中做这个项目,我在其中制作给定图像的反射,就像翻转函数一样,但使用每个像素的坐标。问题是我得到的图像输出都是蓝色的,水平有一条线,我相信我的代码只影响第一个通道。
我试图做imageReflectionFinal.at<Vec3b>(r,c) = image.at<Vec3b>(r,c); 来解决它,但没有任何改变。我会在下面留下代码,提前谢谢。
Mat image = imread("image_dir/image.jpg");
Mat imageReflectionFinal = Mat::zeros(image.size(), image.type());
for(unsigned int r=0; r<image.rows; r++) {
for(unsigned int c=0; c<image.cols; c++) {
imageReflectionFinal.at<Vec3b>(r,c) = image.at<Vec3b>(r,c);
Vec3b sourcePixel = image.at<Vec3b>(r,c);
imageReflectionFinal.at<Vec3b>(r, c) = (uchar)(c, -r + (220)/2);
}
}
【问题讨论】:
-
(uchar)(c, -r + (220)/2)-- 逗号是逗号操作符,因此这与static_cast<uchar>(110 - r)相同。将每个像素的蓝色通道设置为这个值没有任何意义,因此结果。 |在同一条语句中还涉及溢出和一个错误。 -
哎呀!如今的计算机非常有弹性。在过去,大型机会因如此多的编程错误而起火。
-
不使用flip的原因是什么?
标签: c++ image opencv reflection