小编Chr*_*itz的帖子

如何使用 python 和 OpenCV 逐帧显示视频(通过按键)

我正在尝试打开一个视频文件并使用按键逐帧播放它。因此,它将打开并无限期地显示单个帧,直到按下特定的键,然后它会切换到下一帧。

我正在使用 Python 3 和 OpenCV。这是我第一次使用 OpenCV,所以欢迎任何更正/建议。

下面的代码的工作原理是,它一次显示一帧视频,但不仅在我按下时显示k,而且在按下任何键时它都会忽略q退出。

import cv2
import os


def play_video(folder):
    # load video capture from file
    video = cv2.VideoCapture(os.path.join(folder, "Field.mp4"))
    # window name and size
    cv2.namedWindow("video", cv2.WINDOW_AUTOSIZE)
    while video.isOpened():
        # Read video capture
        ret, frame = video.read()
        # Display each frame
        cv2.imshow("video", frame)
        # show one frame at a time
        cv2.waitKey(00) == ord('k')
        # Quit when 'q' is pressed
        if cv2.waitKey(1) == ord('q'):
            break
    # Release capture object
    video.release()
    # Exit and …
Run Code Online (Sandbox Code Playgroud)

python video user-interface opencv

2
推荐指数
1
解决办法
1万
查看次数

OpenCV 错误:参数错误、重载解析失败、索引为 0 的序列项类型错误

我正在做一个简单的项目来检测 QR 码并从网络摄像头捕获中绘制边界框。

import cv2
import numpy as np
import sys 
import time
#
# Sanity Check
print("QR Scanner initialized.")


# Utility function to get a video frame from webcam.
# @param: cap is a cv2.videoCapture object.
def captureFrame(cap):
    ret, frame = cap.read()
    if ret == False:
        print("Capture failed.")
    return frame

# Utility function to draw bounding box on frame.
def display(img, bbox):
    n = len(bbox)
    
    for j in range(n):
        cv2.line(img, 
                 tuple(bbox[j][0]), 
                 tuple(bbox[ (j+1) % n][0]), 
                 (255,0,0), 
                 3)
        cv2.imshow("Video", img) …
Run Code Online (Sandbox Code Playgroud)

python opencv

2
推荐指数
1
解决办法
1万
查看次数

查找与 +10.000 个其他具有相似特征的图像最接近的匹配

我试图找到与大量其他图像(+10.000)最接近的图像匹配。背景颜色全白色,相同的拍摄角度,图像内容形状彼此接近(见下图)。我尝试使用opencvandORBBFMatcherwithknnMatch来找到最接近的匹配。但我还没有找到我想要的比赛。

据我理解,图像需要是灰度的,但就我而言,我认为颜色是一个非常重要的描述符?

我对 opencv 和图像匹配都很陌生,所以如果我需要使用其他方法,你能帮助我吗?

import cv2
import os
orb = cv2.ORB_create(nfeatures=1000) # Find 1000 features to match from 
bf = cv2.BFMatcher()

# Image to match
findImg = 'captainA.png'
imgCur = cv2.imread(f'{"Images"}/{findImg}', 0)
kp1,des1 = orb.detectAndCompute(imgCur,None)

# Loop through all superheroe images and find closest match
images = ["img1.png","img2.png","img3.png","img4.png","img5.png","img6.png","img7.png","img8.png","img9.png","img10.png","img11.png","img12.png"]

matchList = []
names = []
for img in images:
    imgCur = cv2.imread(f'{Superheroes}/{img}', 0)
    kp2,des2 = orb.detectAndCompute(imgCur,None)
 
    matches = bf.knnMatch(des1,des2,k=2)
    goodMatches = [] …
Run Code Online (Sandbox Code Playgroud)

python opencv classification computer-vision object-recognition

2
推荐指数
1
解决办法
3699
查看次数

如何在 python 脚本中运行 ffmpeg 命令?

我想使用 ffmpeg 和 python 在图像上叠加透明视频

我可以通过终端成功完成此操作,但无法让 ffmpeg 命令在 python 中工作。当我位于包含文件的目录中时,以下命令会在终端中生成我想要的结果。

ffmpeg -i head1.png -i hdmiSpitting.mov -filter_complex "[0:v][1:v] overlay=0:0" -pix_fmt yuv420p -:a copy output3.mov
Run Code Online (Sandbox Code Playgroud)

在 python 中,我的代码很简单:

import os
import subprocess
command = "ffmpeg -i head1.png -i hdmiSpitting.mov -filter_complex \"[0:v][1:v] overlay=0:0\" -pix_fmt yuv420p -c:a copy output3.mov"
subprocess.call(command,shell=True)
Run Code Online (Sandbox Code Playgroud)

代码运行,没有任何错误指示,但没有产生任何输出。

我在这里缺少什么?

python subprocess ffmpeg video-processing

2
推荐指数
1
解决办法
7941
查看次数

如何改进 Aruco 标记姿势估计?

我很难用相机估计 Aruco 标记的位置。在我使用 DICT_6X6_250 字典和上面有 4 个 20x20 厘米标记的板进行测试时,我测量了 6 米,误差为 20-30 厘米。我需要更精确的测量。

这个错误率正常吗?我可以做什么来提高准确性?

computer-vision pose-estimation aruco

2
推荐指数
1
解决办法
4201
查看次数

Opencv imshow 是对的,而 imwrite 是错的?

我只想用另一个 png 图像覆盖一个 png 图像,cv2.imshow得到正确的结果,cv2.imwrite得到奇怪的结果。

coverImg = cv2.imread('./images/cover.png', cv2.IMREAD_UNCHANGED)
back = cv2.imread('./images/back.png', cv2.IMREAD_UNCHANGED)

x_offset = y_offset = 0

y1, y2 = y_offset, y_offset + coverImg.shape[0]
x1, x2 = x_offset, x_offset + coverImg.shape[1]

alpha_s = coverImg[:, :, 3] / 255.0
alpha_l = 1.0 - alpha_s

result = back.copy()

for c in range(0, 3):
    result[y1:y2, x1:x2, c] = (alpha_s * coverImg[y1:y2, x1:x2, c] +
                               alpha_l * result[y1:y2, x1:x2, c])

cv2.imshow("result", result)
res2 = cv2.imwrite("./result.png", result)
Run Code Online (Sandbox Code Playgroud)

result.dtypeuint8 …

python opencv

2
推荐指数
1
解决办法
125
查看次数

cv2.error: OpenCV(4.5.2) C:\Users\ ... \modules\imgproc\src\resize.cpp:3929: 错误: (-215:断言失败) func != 0 函数 'cv::哈尔::调整大小'

我尝试运行以下代码:

a = np.array([[1,0],[0,0]])
a = cv2.resize(a , (400,400))
cv2.imshow('Image', a)
cv2.waitKey(0)
cv2.destroyAllWindows
Run Code Online (Sandbox Code Playgroud)

并得到这个错误:

cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-_8k9tw8n\opencv\modules\imgproc\src\resize.cpp:3929: error: (-215:Assertion failed) func != 0 in function 'cv::hal::resize'

找不到任何类似的问题

python opencv numpy image-resizing

1
推荐指数
1
解决办法
9027
查看次数

如何使用 OpenCV 只检测参考图像中出现的黑色矩形

原始图像

我只需要检测出现在那里的黑色矩形,但由于某种原因,我的代码没有检测到它,但它确实检测到许多其他东西。

import cv2

img=cv2.imread('vision.png') #read image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Blur=cv2.GaussianBlur(gray,(5,5),1) #apply blur to roi
Canny=cv2.Canny(Blur,10,50) #apply canny to roi

#Find my contours
contours =cv2.findContours(Canny,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)[0]

cntrRect = []
for i in contours:
        epsilon = 0.05*cv2.arcLength(i,True)
        approx = cv2.approxPolyDP(i,epsilon,True)
        if len(approx) == 4:
            cv2.drawContours(img,cntrRect,-1,(0,255,0),2)
            cv2.imshow('Image Rect ONLY',img)
            cntrRect.append(approx)

cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)

如何仅检测图像中出现的黑色矩形

在此输入图像描述

但是这段代码检测更多的矩形,我不想要whis,但我只想检测黑色的countour矩形 在此输入图像描述

python opencv image-processing

1
推荐指数
1
解决办法
1735
查看次数

我如何让树莓派 pico 与 PC/外部设备通信

例如,当我给代码5时,我想打开我们的rpi pico中的LED(rpi pico通过电缆连接到电脑)

#This code will run in my computer (test.py)

x=int(input("Number?"))
if (x==5):
    #turn on raspberry pi pico led
Run Code Online (Sandbox Code Playgroud)

rpi pico的代码:

#This code will run in my rpi pico (pico.py)

from machine import Pin
led = Pin(25, Pin.OUT)

led.value(1)
Run Code Online (Sandbox Code Playgroud)

反之亦然(使用 rpi pico 中的代码在计算机上的代码中执行某些操作)

我如何调用/获取 pc 中的变量到 rpi pico

注意:我正在使用 opencv python 编写代码,我想在我的计算机上处​​理来自计算机摄像头的数据,并且我希望 rpi pico 根据处理后的数据做出反应。并将树莓派 pico 通过电缆连接到电脑。

python raspberry-pi micropython raspberry-pi-pico

1
推荐指数
1
解决办法
9168
查看次数

洪水填充 Numpy 布尔矩阵的有效方法:如何替换所有由“True”括起来的“False”值

H x W对于仅包含True和值的形状的给定图像掩模矩阵False,我希望将所有False值转换为True它们完全被值包围时的True值。

例如

mask = np.array([
    [True,  True,  True,  True,  True ],
    [True,  False, True,  False, True ],
    [True,  True,  True,  False, True ],
    [True,  False, False, False, True ],
    [True,  True,  True,  True,  True ]
])
Run Code Online (Sandbox Code Playgroud)

结果应该是

np.array([
    [True,  True,  True,  True,  True ],
    [True,  True,  True,  True,  True ],
    [True,  True,  True,  True,  True ],
    [True,  True,  True,  True,  True ],
    [True,  True,  True,  True,  True …
Run Code Online (Sandbox Code Playgroud)

python opencv numpy image-processing

1
推荐指数
1
解决办法
99
查看次数