gpt4 book ai didi

python - AttributeError: 'NoneType'对象没有属性 'copy'

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

完整的错误是:


OpenCV: out device of bound (0-0): 1
OpenCV: camera failed to properly initialize!
Traceback (most recent call last):
File "/Users/syedrishad/PycharmProjects/OpenCVPython/venv/project1.py", line 60, in <module>
imgResult = img.copy()
AttributeError: 'NoneType' object has no attribute 'copy'
```

完整的代码是:
```import cv2
import numpy as np

frameWidth = 640
frameHeight = 480
cap = cv2.VideoCapture(1)
cap.set(3, frameWidth)
cap.set(4, frameHeight)
cap.set(10, 150)

myColors = [[78, 119, 70, 255, 97, 255],
[63, 108, 44, 255, 0, 118],
[0, 179, 69, 255, 100, 255],
[90, 48, 0, 118, 255, 255]]
myColorValues = [[51, 153, 255], ## BGR
[255, 0, 255],
[0, 255, 0],
[255, 0, 0]]

myPoints = [] ## [x , y , colorId ]


def findColor(img, myColors, myColorValues):
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
count = 0
newPoints = []
for color in myColors:
lower = np.array(color[0:3])
upper = np.array(color[3:6])
mask = cv2.inRange(imgHSV, lower, upper)
x, y = getContours(mask)
cv2.circle(imgResult, (x, y), 15, myColorValues[count], cv2.FILLED)
if x != 0 and y != 0:
newPoints.append([x, y, count])
count += 1
# cv2.imshow(str(color[0]),mask)
return newPoints


def getContours(img):
contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
x, y, w, h = 0, 0, 0, 0
for cnt in contours:
area = cv2.contourArea(cnt)
if area > 500:
# cv2.drawContours(imgResult, cnt, -1, (255, 0, 0), 3)
peri = cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, 0.02 * peri, True)
x, y, w, h = cv2.boundingRect(approx)
return x + w // 2, y


def drawOnCanvas(myPoints, myColorValues):
for point in myPoints:
cv2.circle(imgResult, (point[0], point[1]), 10, myColorValues[point[2]], cv2.FILLED)


while True:
success, img = cap.read()
imgResult = img.copy()
newPoints = findColor(img, myColors, myColorValues)
if len(newPoints) != 0:
for newP in newPoints:
myPoints.append(newP)
if len(myPoints) != 0:
drawOnCanvas(myPoints, myColorValues)

cv2.imshow("Result", imgResult)
if cv2.waitKey(1) and 0xFF == ord('q'):
break ```
如何解决此错误?任何帮助将不胜感激,我一直在尝试并且现在一个星期都没有找到答案。我不明白为什么它不起作用。我看过此错误的其他示例,但是没有一种解决方案有效。
再次感谢您的帮助。

最佳答案

导致错误的行:

imgResult = img.copy()
利用上一行中定义的 img:
success, img = cap.read()
read 文档状态:

The methods/functions combine VideoCapture::grab() and VideoCapture::retrieve() in one call. This is the most convenient method for reading video files or capturing data from decode and return the just grabbed frame. If no frames has been grabbed (camera has been disconnected, or there are no more frames in video file), the methods return false and the functions return NULL pointer.


因此,由于没有读取数据,因此 img显然是 None
改成:
while True:
success, img = cap.read()
if img is None:
break
imgResult = img.copy()
另外,检查导致未捕获任何帧的原因:
  • 相机已断开连接(检查所有驱动程序以确保已安装并检测到它)
  • 视频文件
  • 中没有更多帧

    关于python - AttributeError: 'NoneType'对象没有属性 'copy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63782780/

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