" 到 "double" 的适当转换函数 -Go服务器开发" />

ZBLOG

addWeighted(resultImage.clone(), alpha * (score >= 30 ? 1 : 0), blueMask * (score >= 30 ? alpha : cv::Scalar(0)), alpha * (score >= 30 ? alpha : cv::Scalar(1)), resultImage); 不存在从 "cv::Scalar_" 到 "double" 的适当转换函数

在 OpenCV 的 addWeighted 函数中,参数应该是 double 类型的权重值和图像矩阵。你遇到的错误是因为使用了条件表达式,它返回的是 cv::Scalar 类型,而 addWeighted 的参数期望的是 double 类型。

为了修复这个问题,你需要确保传递给 addWeighted 的所有参数都是正确的类型。这里的目标是根据得分决定遮罩的贡献,但没有必要把遮罩乘以 alpha

下面是更正后的代码示例:

  1. #include "../pre_process/ImageQuality.h" // 确保这个路径是正确的并且包含BRISQUE函数的实现
  2. #include <opencv2/opencv.hpp>
  3. #include <iostream>
  4. int main()
  5. {
  6. cv::Mat img1;
  7. double score; // 将 score 的类型更改为 double
  8. img1 = cv::imread("Data/img_in/5.bmp");
  9. if (img1.empty()) {
  10. std::cerr << "Error: Could not open image." << std::endl;
  11. return -1;
  12. }
  13. int blockSize = 320; // 块大小320x320
  14. cv::Mat resultImage = img1.clone(); // 创建结果图像
  15. cv::Mat greenMask(img1.size(), CV_8UC3, cv::Scalar(0, 0, 0)); // 初始化绿色遮罩
  16. cv::Mat blueMask(img1.size(), CV_8UC3, cv::Scalar(0, 0, 0)); // 初始化蓝色遮罩
  17. for (int row = 0; row < img1.rows / blockSize; ++row) {
  18. for (int col = 0; col < img1.cols / blockSize; ++col) {
  19. // 定义当前小块的矩形区域
  20. cv::Rect roi(col * blockSize, row * blockSize, blockSize, blockSize);
  21. cv::Mat smallBlock = img1(roi);
  22. // 计算 BRISQUE 得分
  23. score = BRISQUE(smallBlock);
  24. if (score < 30.0) {
  25. rectangle(greenMask, roi, cv::Scalar(0, 255, 0), cv::FILLED);
  26. }
  27. else {
  28. rectangle(blueMask, roi, cv::Scalar(255, 0, 0), cv::FILLED);
  29. }
  30. }
  31. }
  32. // 将原图与遮罩合成,设置透明度,例如:透明度为50%
  33. double alpha = 0.5;
  34. addWeighted(resultImage, alpha,
  35. greenMask,
  36. alpha,
  37. 0.0,
  38. resultImage);
  39. addWeighted(resultImage.clone(), alpha,
  40. blueMask,
  41. alpha,
  42. 0.0,
  43. resultImage);
  44. imwrite("Data/img_out/marked_result.bmp", resultImage);
  45. imshow("Result Image", resultImage);
  46. cv::waitKey(0);
  47. return 0;
  48. }

更改说明:

  • 在调用 addWeighted 时,将第二个和第三个参数(来自于蓝色和绿色遮罩)直接作为输入,而不进行任何条件运算。
  • 使用两次调用 addWeighted 来分别添加两个遮罩,以确保每个遮罩都能正确地影响最终图像。

请测试此修改,并告诉我是否解决了您的问题!


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

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:" 到 "double" 的适当转换函数 ">https://golang.0voice.com/?id=20838

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?