目标检测-cv2.addWeighted

图像合并是在大小和属性相同的图像进行合并,进而组成一张新的像素图,像最近比较火的带有国旗属性的图像。此次使用到的是CV2函数的下的addWeighted函数。首先我们先了解一下函数的原型

cv2.addWeighted(src1,alpha,src2,beta,gamma,dst,,dtype) #两张对应输入的图像与其对那个的权重相乘

首先我们在选用图片可以不用考虑其大小,CV2库里的resize函数可以帮我们调整图像大小并不会改变图像其本身的质量。具体调用如下

img_size1=cv2.resize(img1,(600,600));#保持大小一致
img_size2=cv2.resize(img2,(600,600));

接下来就是核心部分,opencv中给我们以C代码实现,这里可以直接使用resize函数就可以。

dst=cv2.addWeighted(img_size1,0.7,img_size2,0.3,0);#国旗作为底色可以将第二张图像的权重值相对小一些

合成后的效果图
在这里插入图片描述
addWeighted函数可以用合并Sobel算子沿 X Y 135° 45°这四个方向计算后图像的近似梯度,从而得到图像的近似边缘,在上一篇博文中提到过图像目标检测,检测图像二值化后图像的阀值检测,其阴影可能会影响其真实的边缘,通过Sobel算子来检测图像的边缘,并用cv2.drawContours()绘制边缘
在这里插入图片描述
以X Y方向的梯度与图像卷积,卷积后我们也可以通过addweighted函进行合并。

image_S=cv2.addWeighted(Grad_x, 0.5, Grad_y, 0.5, 0,)
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
语义分割和目标检测是计算机视觉领域中常用的图像分析任务,它们在目标识别和场景理解方面发挥着重要作用。它们的区别如下: 1. 目标检测主要关注物体定位和分类,可以处理多个物体实例;而语义分割注重像素级别的物体分割和类别标记,无法区分不同实例。 2. 目标检测需要在图像中定位物体的位置,并对其进行分类,通常使用边界框来表示物体的位置和大小;而语义分割则需要对图像中的每个像素进行分类,将每个像素标记为属于哪个类别。 3. 目标检测可以处理遮挡、旋转、缩放等情况,而语义分割则无法区分不同实例,对于遮挡、重叠的物体会出现误判。 4. 目标检测可以输出物体的位置和大小信息,适用于需要知道物体具体位置的应用场景;而语义分割则更适用于需要对图像进行像素级别的分析和理解的场景。 下面是一个目标检测和语义分割的示例代码: ```python # 目标检测示例代码 import cv2 # 加载模型和标签 net = cv2.dnn.readNetFromDarknet('yolov3.cfg', 'yolov3.weights') classes = [] with open('coco.names', 'r') as f: classes = [line.strip() for line in f.readlines()] # 加载图像 img = cv2.imread('dog.jpg') # 对图像进行目标检测 blob = cv2.dnn.blobFromImage(img, 1/255.0, (416, 416), swapRB=True, crop=False) net.setInput(blob) layer_names = net.getLayerNames() output_layers = [layer_names[i[0]-1] for i in net.getUnconnectedOutLayers()] outs = net.forward(output_layers) # 处理检测结果 class_ids = [] confidences = [] boxes = [] for out in outs: for detection in out: scores = detection[5:] class_id = np.argmax(scores) confidence = scores[class_id] if confidence > 0.5: center_x = int(detection[0] * img.shape[1]) center_y = int(detection[1] * img.shape[0]) w = int(detection[2] * img.shape[1]) h = int(detection[3] * img.shape[0]) x = int(center_x - w/2) y = int(center_y - h/2) class_ids.append(class_id) confidences.append(float(confidence)) boxes.append([x, y, w, h]) # 绘制检测结果 indexes = cv2.dnn.NMSBoxes(boxes, confidences, 0.5, 0.4) font = cv2.FONT_HERSHEY_PLAIN colors = np.random.uniform(0, 255, size=(len(classes), 3)) for i in range(len(boxes)): if i in indexes: x, y, w, h = boxes[i] label = str(classes[class_ids[i]]) color = colors[class_ids[i]] cv2.rectangle(img, (x, y), (x+w, y+h), color, 2) cv2.putText(img, label, (x, y-5), font, 1, color, 2) # 显示结果 cv2.imshow('Image', img) cv2.waitKey(0) cv2.destroyAllWindows() # 语义分割示例代码 import cv2 # 加载模型和标签 net = cv2.dnn.readNetFromTorch('deeplabv3_1.t7') classes = [] with open('labels.txt', 'r') as f: classes = [line.strip() for line in f.readlines()] # 加载图像 img = cv2.imread('dog.jpg') # 对图像进行语义分割 blob = cv2.dnn.blobFromImage(img, 1/255.0, (513, 513), swapRB=True, crop=False) net.setInput(blob) out = net.forward() # 处理分割结果 out = out[0, :, :, :] out = cv2.resize(out, (img.shape[1], img.shape[0])) out = np.argmax(out, axis=2) # 绘制分割结果 mask = np.zeros((img.shape[0], img.shape[1], 3), dtype=np.uint8) for i in range(len(classes)): mask[out == i] = np.array([0, 0, 255]) # 将每个类别的像素标记为红色 result = cv2.addWeighted(img, 0.5, mask, 0.5, 0) # 显示结果 cv2.imshow('Image', result) cv2.waitKey(0) cv2.destroyAllWindows() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon在努力啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值