ZBLOG

将960*960的图像分为小块,使用BRISQUE对图像区域模糊进行检测,在原图中用半透明蒙版,将清晰区域用绿色标记,模糊区域用蓝色标记 #include "../pre_process/ImageQuality.h" #include #include int main() { cv::Mat img1, img2; float score; img1 = cv::imread("Data/img_in/5.bmp")...

你的代码思路基本上是正确的,但在实现中可能会存在一些小问题。以下是一个改进和修正后的完整代码示例,确保程序可以正常运行:

#include "../pre_process/ImageQuality.h" // 确保这个路径是正确的并且包含BRISQUE函数的实现
#include <opencv2/opencv.hpp>
#include <iostream>

int main()
{
    cv::Mat img1;
    float score;

    img1 = cv::imread("Data/img_in/5.bmp");

    if (img1.empty()) {
        std::cerr << "Error: Could not open image." << std::endl;
        return -1;
    }

    int blockSize = 320; // 块大小320x320
    cv::Mat resultImage = img1.clone(); // 创建结果图像
    cv::Mat greenMask(img1.size(), CV_8UC3, cv::Scalar(0, 0, 0)); // 初始化绿色遮罩
    cv::Mat blueMask(img1.size(), CV_8UC3, cv::Scalar(0, 0, 0)); // 初始化蓝色遮罩

    for (int row = 0; row < img1.rows / blockSize; ++row) {
        for (int col = 0; col < img1.cols / blockSize; ++col) {
            // 定义当前小块的矩形区域
            cv::Rect roi(col * blockSize, row * blockSize, blockSize, blockSize);
            cv::Mat smallBlock = img1(roi);

            // 计算 BRISQUE 得分
            score = BRISQUE(smallBlock); // 注意,这里需要确保BRISQUE返回的是一个float类型

            if (score < 30.0f) { // 假设30是阈值,可以根据实际情况调整
                rectangle(greenMask, roi, cv::Scalar(0, 255, 0), cv::FILLED); // 在绿色遮罩上填充块
            }
            else {
                rectangle(blueMask, roi, cv::Scalar(255, 0, 0), cv::FILLED); // 在蓝色遮罩上填充块
            }
        }
    }

    // 将原图与遮罩合成,设置透明度,例如:透明度为50%
    double alpha = 0.5;
    
    addWeighted(resultImage, alpha, greenMask, alpha, 0.0, resultImage);
    
    addWeighted(resultImage.clone(), alpha * (score >= 30 ? 1 : 0), 
                blueMask * (score >= 30 ? alpha : cv::Scalar(0)), 
                alpha * (score >= 30 ? alpha : cv::Scalar(1)), 
                resultImage);

    imwrite("Data/img_out/marked_result.bmp", resultImage);
    
    imshow("Result Image", resultImage);
    
    cv::waitKey(0);
    
    return 0;
}

注意事项:

  • 请确保 BRISQUE 函数的实现已经正确加载,并能对输入的小块图像返回模糊得分。
  • 如果要处理每个小块的得分,你需要注意如何存储或使用得分进行颜色标记。上述示例假设最后一段合成代码只考虑最后一个小块的得分。如果你希望综合所有小块的信息,需要调整该逻辑。
  • 确保文件路径和权限都是正确的,以避免因无法读取图片或写入结果而导致的问题。

希望这可以帮助你完成项目!如有其他问题,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20839

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?