平均图像时图像损坏

Image Corruption while Averaging Image

本文关键字:图像 损坏      更新时间:2023-10-16

我编写了以下代码来计算图像的平均值。

cv::Mat image(image_list[0].rows, image_list[0].cols, CV_64FC1);
for (unsigned int list_index = 0; list_index < image_list.size(); ++list_index) {
int image_row = image_list[list_index].rows;
int image_col = image_list[list_index].cols;
for (int row = 0; row < image_row; ++row) {
for (int col = 0; col < image_col; ++col) {
image.at<double>(row, col) += static_cast<double>(image_list[list_index].at<uchar>(row, col));
}
}
}
for (int row = 0; row < image.rows; ++row) {
for (int col = 0; col < image.cols; ++col) {
image.at<double>(row, col) = cvRound(image.at<double>(row, col) / image_list.size());
}
}
image.convertTo(image, CV_8UC1);
resultant_average_image = image;

这里,image是用image_list向量的第一个元素初始化的,在进行计算后,结果被保存到resultant_average_image(这是类的一个属性(。问题是,当我这样做的时候,即使通常它也会给我带来预期的结果。有时它会给我显示一个损坏的图像。我找不到原因。感谢您的帮助。

我怀疑第一行

cv::Mat image(image_list[0].rows, image_list[0].cols, CV_64FC1);

使用尚未初始化的内存分配图像。通常,它可能为零,但并不总是。这可以解释为什么结果图像看起来被破坏了。尝试添加行

image = cv::Scalar(0.0);

就在您分配图像之后。

此外,我会处理image_list可能为空的特殊情况。