我编写了以下代码来计算图像的平均值。
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_list向量的第一个元素初始化图像,并在进行计算后将结果保存到result_average_image(这是类的属性)。 问题是我在这样做的时候,即使通常它也显示了我预期的结果。有时它会显示出损坏的图像。我找不到原因。任何帮助表示赞赏。
答案 0 :(得分:0)
我怀疑第一行
// kostyl: for fix jumping of tableView as for tableView diffucult to calculate height of cells
tableView.kostylAgainstJumping {
if oldIsFolded {
tableView.insertRows(at: indexPaths, with: .fade)
} else {
tableView.deleteRows(at: indexPaths, with: .fade)
}
}
extension UITableView {
func kostylAgainstJumping(_ block: () -> Void) {
self.contentInset.bottom = 300
block()
self.contentInset.bottom = 0
}
}
分配具有尚未初始化的内存的图像。通常,它可能为零,但并非总是如此。那可以解释为什么结果图像看起来损坏了。尝试添加行
cv::Mat image(image_list[0].rows, image_list[0].cols, CV_64FC1);
在分配图像之后。
此外,我会处理image = cv::Scalar(0.0);
可能为空的特殊情况。