平均图像时图像损坏
Image Corruption while Averaging Image
我编写了以下代码来计算图像的平均值。
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
可能为空的特殊情况。
相关文章:
- 为什么会发生堆损坏
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 图像在本地主机上显示已损坏
- 滚动时,wxscrolledwindow中的图像损坏
- 从垫子到矢量,<Vec3f>反之亦然,而不会损坏图像
- SFML图像加载在发布版本上失败 - 文件名损坏
- C++中的图像HTTP上载已损坏
- Bitblt,createdibssection,图像损坏
- vo_ros/VO: malloc():由图像大小引起的内存损坏
- 从android部分发送图像并从pc接收,但图像已损坏
- 读取/写入 PPM 图像C++,新图像损坏