简体   繁体   English

如何将图像或视频放置在轮廓线的相同位置,python + opencv

[英]How to put an image or video in the same position of a contour line, python + opencv

i have the position of the contour, how can i put an image or video at the same position of the contour and on the other hand as i can reduce the size of both. 我有轮廓的位置,如何将图像或视频放在轮廓的相同位置,另一方面又可以减小两者的尺寸。 my code is 我的代码是

import cv2
import numpy as np

#Iniciar camara
captura = cv2.VideoCapture(0)

while(1):

#Caputrar una imagen y convertirla a hsv
_, imagen = captura.read()
hsv = cv2.cvtColor(imagen, cv2.COLOR_BGR2HSV)
img=cv2.imread('calibresult.png')
#Guardamos el rango de colores hsv (azules)
bajos = np.array([100,65,75], dtype=np.uint8)
altos = np.array([130, 255, 255], dtype=np.uint8)

#Crear una mascara que detecte los colores
mask = cv2.inRange(hsv, bajos, altos)

#Filtrar el ruido con un CLOSE seguido de un OPEN
kernel = np.ones((6,6),np.uint8)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)

#Difuminamos la mascara para suavizar los contornos y aplicamos filtro canny
blur = cv2.GaussianBlur(mask, (5, 5), 0)
edges = cv2.Canny(mask,1,2)

#Si el area blanca de la mascara es superior a 500px, no se trata de ruido
contours, hier = cv2.findContours(edges,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
areas = [cv2.contourArea(c) for c in contours]
i = 0
for extension in areas:
    if extension > 600:
        actual = contours[i]#position of countour
        approx = cv2.approxPolyDP(actual,0.05*cv2.arcLength(actual,True),True)
        if len(approx)==3:
            cv2.drawContours(imagen,[actual],0,(0,0,255),2)
            cv2.drawContours(mask,[actual],0,(0,0,255),2)

        i = i+1

cv2.imshow('mask', mask)
cv2.imshow('Camara', imagen)
tecla = cv2.waitKey(5) & 0xFF
if tecla == 27:
    break

cv2.destroyAllWindows()

"actual" is the position of the contour for example, i want the code to register the outline of a rectangle and in the same position of the outline place an image, all in real time,the position would be with respect to the center of the contour “实际”是轮廓的位置,例如,我希望代码注册矩形的轮廓,并在轮廓的相同位置实时放置图像,该位置将相对于轮廓的中心轮廓

From the excellent answer given here : 这里给出的出色答案:

dst = cv2.imread("destination.jpg", -1)
src = cv2.imread("source.jpg", -1)

gray = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 130, 255, cv2.THRESH_BINARY)

im2,contours,hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)

for contour in contours:
    cv2.drawContours(dst, contour, -1, (0,0,255), thickness = 2)

locs = np.where(binary != 0) # Get the non-zero mask locations

# Case #1 - Other image is grayscale and source image is colour
if len(dst.shape) == 3 and len(src.shape) != 3:
    dst[locs[0], locs[1]] = src[locs[0], locs[1], None]
# Case #2 - Both images are colour or grayscale
elif (len(dst.shape) == 3 and len(src.shape) == 3) or (len(dst.shape) == 1 and len(src.shape) == 1):
    dst[locs[0], locs[1]] = src[locs[0], locs[1]]
# Otherwise, we can't do this
else:
    raise Exception("Incompatible input and output dimensions")

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM