Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv Python输入数组错误_Python_Arrays_Opencv_Video Capture - Fatal编程技术网

Opencv Python输入数组错误

Opencv Python输入数组错误,python,arrays,opencv,video-capture,Python,Arrays,Opencv,Video Capture,我最近开始探索OpenCV,对此我非常了解。在原始视频帧中显示缩放视频帧时遇到问题。希望这是有意义的。一切正常,但当我试图改变缩放视频的颜色时,我得到了一个错误。这是我的代码,希望它是不言自明的 import cv2 import numpy as np cap = cv2.VideoCapture(0) while True: #"ret" returns a frame ret, frame = cap.read() #Draw a rectangle at g

我最近开始探索OpenCV,对此我非常了解。在原始视频帧中显示缩放视频帧时遇到问题。希望这是有意义的。一切正常,但当我试图改变缩放视频的颜色时,我得到了一个错误。这是我的代码,希望它是不言自明的

import cv2
import numpy as np

cap = cv2.VideoCapture(0)

while True:
    #"ret" returns a frame
    ret, frame = cap.read()

    #Draw a rectangle at given location
    cv2.rectangle(frame,(500,80),(800,380),(0,255,0),5)

    #takes a sample of the frame marked by the rectangle area(y,x)
    face_track = frame[80:380, 500:800]
    #converts the sample to gray
    grayscaled = cv2.cvtColor(face_track,cv2.COLOR_BGR2GRAY)
    #threshold range of sample
    retvl, threshold = cv2.threshold(grayscaled,125,125,cv2.THRESH_BINARY)

    #overwrites/display a new area with the sample taken by face_track in the left top corner of the frame
    frame[0:300, 0:300] = threshold

    #displays the frames captured by cap
    cv2.imshow('frame',frame)
    #cv2.imshow('frame',threshold)

    #if key stroke is 'q' break and terminate 
    if cv2.waitKey(0) & 0xff == ord('q'): 
        break

cap.release()
cv2.destroyAllWindows()
错误如下:

帧[0:300,0:300]=阈值 ValueError:无法将输入数组从形状(300300)广播到形状(300300,3)

如果我将其更改为:

帧[0:300,0:300]=面轨道

它起作用了。但这不是我想要的

同样,如果我改为输出阈值,
cv2.imshow('帧',阈值)
, 它也会起作用。但又不是我想要的


除了cv2.cvtColor之外,还有没有其他不改变阵列形状的功能。

将thresh gray转换为BGR


cv2.CVT颜色(阈值,cv2.COLOR_GRAY2BGR)

将阈值灰度转换为BGR


cv2.cvtColor(阈值,cv2.COLOR_GRAY2BGR)

错误在于您正在三通道矩阵(8UC3)上执行单通道矩阵(8UC1)操作

要解决此问题,您需要将单通道矩阵(灰度)转换为三通道(BGR)或对单通道矩阵执行单通道矩阵操作。要在python openCV中执行此操作,请执行以下操作:

cv2.cvtColor(threshold,cv2.COLOR_GRAY2BGR)

错误在于您正在三通道矩阵(8UC3)上执行单通道矩阵(8UC1)操作

要解决此问题,您需要将单通道矩阵(灰度)转换为三通道(BGR)或对单通道矩阵执行单通道矩阵操作。要在python openCV中执行此操作,请执行以下操作:

cv2.cvtColor(threshold,cv2.COLOR_GRAY2BGR)

很好,成功了!谢谢你能解释一下发生了什么事吗@bluekidcolor图像有3个通道,灰度1很好,工作正常!谢谢你能解释一下发生了什么事吗@bluekidcolor图像有3个通道,灰度为1