使用yolo识别模型对比两张图片并标记不同(2)

上篇文章有漏洞,在这里补充下,比如要识别第二张图相对于第一张图的违建是否拆除了

第一步旋转对其后,图片会有黑色的掩码,如果旋转角度大的话,没识别出来的框可能不是已经拆除了,而是因为黑色掩码遮挡,如下图:

思路:

将第二张图像中计算出的黑色掩码应用到第一张图像上,再拿两张图片用模型识别对象

# 读取目标图像和计算出的掩码图像
target_img = cv2.imread('overlap1.jpg')
computed_mask_img = cv2.imread('overlap2.jpg', cv2.IMREAD_GRAYSCALE)

# 确保计算出的黑色掩码图像与目标图像具有相同的尺寸
computed_mask_img = cv2.resize(computed_mask_img, (target_img.shape[1], target_img.shape[0]))

# 将计算出的黑色掩码应用到目标图像上
result = cv2.bitwise_and(target_img, target_img, mask=computed_mask_img)

cv2.imwrite('overlap.jpg', result)

改完之后两张图片长这样:

现在再用两张图片做目标识别精确度就会更高点 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在OpenCV中使用YOLO进行图像检测,可以按照以下步骤进行: 1. 安装OpenCV和YOLO 2. 加载YOLO网络和权重文件,初始化检测器 ```cpp cv::dnn::Net net = cv::dnn::readNetFromDarknet(yolo_cfg_path, yolo_weights_path); ``` 3. 读取图像,将其转换为blob格式并传递给网络进行检测 ```cpp cv::Mat image = cv::imread(image_path); cv::Mat blob = cv::dnn::blobFromImage(image, 1 / 255.0, cv::Size(416, 416), cv::Scalar(0, 0, 0), true, false); net.setInput(blob); cv::Mat detection = net.forward(); ``` 4. 解析检测结果并绘制边界框 ```cpp float confidence_threshold = 0.5; std::vector<int> class_ids; std::vector<float> confidences; std::vector<cv::Rect> boxes; for (int i = 0; i < detection.rows; ++i) { cv::Mat row = detection.row(i); cv::Mat scores = row.colRange(5, detection.cols); cv::Point class_id; double confidence; cv::minMaxLoc(scores, nullptr, &confidence, nullptr, &class_id); if (confidence > confidence_threshold) { int x_center = static_cast<int>(row.at<float>(0) * image.cols); int y_center = static_cast<int>(row.at<float>(1) * image.rows); int width = static_cast<int>(row.at<float>(2) * image.cols); int height = static_cast<int>(row.at<float>(3) * image.rows); int x_left = x_center - width / 2; int y_top = y_center - height / 2; class_ids.push_back(class_id.x); confidences.push_back(confidence); boxes.emplace_back(x_left, y_top, width, height); } } for (int i = 0; i < boxes.size(); ++i) { cv::rectangle(image, boxes[i], cv::Scalar(0, 0, 255), 2); } ``` 要识别两张图片不同之处,可以将两张图片都传递给YOLO进行检测,然后比较检测结果的差异。可以使用OpenCV的图像差分函数(cv::absdiff)来比较两张图像的像素值差异,并将差异区域作为输入传递给YOLO进行检测,然后在原始图像上绘制检测结果的边界框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值