gpt4 book ai didi

python - img不是一个numpy数组,也不是一个标量…但是 'img'在我的代码中没有用作变量名

转载 作者:行者123 更新时间:2023-12-02 17:41:48 25 4
gpt4 key购买 nike

我正在尝试在视频中找到垂直线。 Python 2.7和OpenCV 3。
我正在使用背景减法,然后应用Canny Edge Detection滤镜。
我已经能够将HoughLinesP方法应用于单个图像,但需要将其扩展到视频。

运行基本代码集(我认为与下面的“a,b,c = hlines.shape”行相对应)时,我收到此错误:

Video file not grabbed
Traceback (most recent call last):
File "test2.py", line 60, in <module>
cv2.line(camera, (hlines[k][0][0], hlines[k][0][1]), (hlines[k][0][2], hlines[k][0][3]), (0,255,0), 3, cv2.LINE_AA)
TypeError: img is not a numpy array, neither a scalar

现在,发生了几件奇怪的事情,第一个'img'并不是该脚本中的变量名(尽管它在我过去编写的其他脚本中使用过,并且在...上称为HoughLinesP)在这里可能没关系)。另一个奇怪的是,相同的代码在从该视频文件获取的.PNG图像上也能正常工作。
我可以很好地打开视频文件并应用上述过滤器。
现在,有趣的是,由于某种原因...也正在输入“if not args.get(” video“,False):”案例。即使我可以通过终端“到达”该视频文件也很好。
我也可以输出(print(hlines.shape))就好了...

这是代码。注释掉“for循环”的各行,可以使其运行良好。
import cv2
import numpy as np
import imutils
import argparse

np.set_printoptions(threshold=np.inf) #to print entire array, no truncation

ap = argparse.ArgumentParser()
ap.add_argument("-v", "--video", help = "/home/odroid/Desktop/python_scripts/test/test_images/Edited_Foam_Dispense_Short.mp4")

args = vars(ap.parse_args())

LOWER_BOUND = 55 #cv2.threshold()
UPPER_BOUND = 255 #cv2.threshold()

CANNY_LOWER_BOUND = 10 #cv2.Canny()
CANNY_UPPER_BOUND = 250 #cv2.Canny()

MIN_LINE_LENGTH = 2 #HoughLinesP()
MAX_LINE_GAP = 100 #HoughLinesP()
HOUGH_THETA = np.pi/180 #HoughLinesP() angle resolution of the accumulator, radians
HOUGH_THRESHOLD = 25 #HoughLinesP()
HOUGH_RHO = 1 #HoughLinesP() rho, Distance resolution of the accumulator, pixels


#bkgnd = cv2.bgsegm.createBackgroundSubtractorMOG()
camera = cv2.VideoCapture('/home/odroid/Desktop/python_scripts/test/test_images/Edited_Foam_Dispense_Short.mp4')

# if a video path was not supplied, grab the reference
# to the webcam
if not args.get("video", False):
camera = cv2.VideoCapture(0)
print("Video file not grabbed")

# otherwise, grab a reference to the video file
else:
camera = cv2.VideoCapture(args["video"])

while(True):
(grabbed, frame) = camera.read()

# if we are viewing a video and we did not grab a frame,
# then we have reached the end of the video
if args.get("video") and not grabbed:
break

# resize the frame, blur it, and convert it to the HSV
# color space
frame = imutils.resize(frame, width=600)

canny_threshold = cv2.Canny(frame, CANNY_LOWER_BOUND, CANNY_UPPER_BOUND)
hlines = cv2.HoughLinesP(canny_threshold, HOUGH_RHO, HOUGH_THETA, MIN_LINE_LENGTH, MAX_LINE_GAP)

a,b,c = hlines.shape

for k in range(a):
#pretty sure the issue is somewhere here
cv2.line(camera, (hlines[k][0][0], hlines[k][0][1]), (hlines[k][0][2], hlines[k][0][3]), (0,255,0), 3, cv2.LINE_AA)



cv2.imshow("Frame", frame)
cv2.imshow('image', canny_threshold)





if cv2.waitKey(1) & 0xFF == ord('q'):
break

camera.release()
cv2.destroyAllWindows()

任何建议,将不胜感激。

最佳答案

@耶鲁·卢克的答案似乎已经解决了问题。
我的函数调用错误。

据我所知,我正在尝试使用原始视频捕获变量(文件路径)作为解析数组。这个原始变量不是数组(它是文本字符串)...回想起来,使错误更有意义。
我将抛出错误的行更改为:

cv2.line(frame, (hlines[k][0][0], hlines[k][0][1]), (hlines[k][0][2], hlines[k][0][3]), (0,255,0), 3, cv2.LINE_AA)  `

这使我可以遍历数组。

关于python - img不是一个numpy数组,也不是一个标量…但是 'img'在我的代码中没有用作变量名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com