首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有自动特定轮廓识别的视频裁剪

具有自动特定轮廓识别的视频裁剪
EN

Stack Overflow用户
提问于 2021-08-19 13:25:46
回答 1查看 306关注 0票数 1

我需要有人帮我做一个项目。我的意图是用OpenCV和python裁剪声纳的视频,以便进一步处理它们。我要寻找的特征是:

  1. 循环遍历文件夹
  2. 中的所有可用视频,找到等高线并裁剪
  3. ,将每个视频导出一个固定大小和分辨率的

现在,我有点卡在轮廓查找和裁剪部分。我想让OpenCV自动识别环绕超声形状的包围盒,知道所有的视频都有特定的圆锥形状。此外,如果能消除不相关的杂波,那就太好了。你能帮帮我吗?附加您可以找到一个原始帧的视频和希望的结果。

代码语言:javascript
复制
import cv2
import numpy as np

cap = cv2.VideoCapture('video.mjpg')

# (x, y, w, h) = cv2.boundingRect(c)
# cv2.rectangle(frame, (x,y), (x+w, y+h), (0, 255, 0), 20)
# roi = frame[y:y+h, x:x+w]

while True:
    ret, frame = cap.read()
    # (height, width) = frame.shape[:2]
    sky = frame[0:100, 0:200]
    cv2.imshow('Video', sky)

    if cv2.waitKey(1) == 27:
        exit(0)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-19 17:56:22

对于第一帧视频,您可以使用它检测图像的边界框,然后可以裁剪它或任何您想要的内容:)

代码语言:javascript
复制
import sys
import cv2
import numpy as np

# Load our image
dir = sys.path[0]
org = cv2.imread(dir+'/im.png')
im=org.copy()
H,W=im.shape[:2]

# Convert image to grayscale
im=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)

# remove noise
im=cv2.GaussianBlur(im,(21,21),21)
im=cv2.erode(im,np.ones((5,5)))

# remove horizantal line
im=cv2.GaussianBlur(im,(5,0),21)
blr=im.copy()

# make binary image
im=cv2.threshold(im,5,255,cv2.THRESH_BINARY)[1]

# draw black border around image to better detect blobs:
cv2.rectangle(im,(0,0),(W,H),0,thickness=W//25)
bw=im.copy()

# Invert the black and white colors
im=~im

# Find contours and sort them by width
cnts, _ = cv2.findContours(im, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnts.sort(key=lambda x: cv2.boundingRect(x)[2],reverse=True)

# Change the type and channels of image copies
im=cv2.cvtColor(im,cv2.COLOR_GRAY2BGR)
bw=cv2.cvtColor(bw,cv2.COLOR_GRAY2BGR)
blr=cv2.cvtColor(blr,cv2.COLOR_GRAY2BGR)

# Find the second biggest blob
x, y, w, h = cv2.boundingRect(cnts[1])
cv2.rectangle(org, (x, y), (x+w, y+h), (128, 0, 255), 10)
cv2.rectangle(im, (x, y), (x+w, y+h), (128, 255, 0), 10)
print(x,y,w,h)

# Save final result
top=np.hstack((blr,bw))
btm=np.hstack((im,org))
cv2.imwrite(dir+'/img_.png',np.vstack((top,btm)))

包围-盒区:

代码语言:javascript
复制
133 25 736 635

剪切并保存最终图像:

代码语言:javascript
复制
org = cv2.imread(dir+'/im.png')
cv2.imwrite(dir+'/img_.png',org[y:y+h,x:x+w])

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68848753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档