有人知道如何在开放式简历中使用四个频道。我有一个来自e con系统的rgb-ir摄像机(See3CAM_CU40),我尝试以通常的方式编写如下代码。它只提供完整的黑色视频。我猜这是因为opencv最初要求gbr。但是我不知道视频源有4个频道时该怎么办。
import cv2
def main():
windowName1 =" LIve video Feed"
cv2.namedWindow(windowName1)
cap=cv2.VideoCapture(1)
# cap.set(cv2.CAP_PROP_EXPOSURE,-1)
cap.set(cv2.CAP_FFMPEG,True)
cap.set(cv2.CAP_PROP_FPS,30)
if cap.isOpened():
ret,frame = cap.read()
else:
ret=False
while ret:
ret,frame =cap.read()
# r,g,b =cv2.split(frame)
# output = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow(windowName1,frame)
if cv2.waitKey(1) ==27:
break
#cv2.destroyWindow(windowName)
cv2.destroyAllWindows()
cap.release()
if __name__ == '__main__':
main()
答案 0 :(得分:0)
您需要添加以下转换以分别拆分RGB和IR。另外,您需要设置VideoCapture_Object.set(CV_CAP_PROP_CONVERT_RGB,false);打开视频节点后 获得原始的Y16图像OpenCV 3.3及更高版本。在以下OpenCV 3.3版本中,默认情况下不支持Y16版本。
/ ********************************************** ************************************** /
//转换为8位:
//将10位(1024)像素缩放为8位(255)(255/1024)= 0.249023
convertScaleAbs(InputImage,BayerFrame8,0.249023);
///填充丢失的G通道拜耳数据
ConvertRGIR2RGGB(BayerFrame8,BayerFrame8,IRImage);
///实际的Bayer格式为BG,但Opencv使用BGR而非RGB,因此采用RG Bayer格式
cvtColor(BayerFrame8,BGRImage,COLOR_BayerRG2BGR);
namedWindow(“ Camera BGR Frame”,WINDOW_AUTOSIZE);
imshow(“ Camera BGR Frame”,BGRImage);
namedWindow(“ Camera IR Frame”,WINDOW_AUTOSIZE);
imshow(“相机红外帧”,IRImage);
/ ************************************************** ********************************** /
///转换后的实际数据格式BGIRR BGGR-IR被替换为G
// IR数据作为单独的图像收集
bool ConvertRGIR2RGGB(Mat BayerRGIR,Mat和BayerRGGB,Mat和IRimage)
{
//用G数据替换IR像素后的结果图像
BayerRGGB = BayerRGIR.clone();
// IR数据将是Bayer Image的一半
IRimage = Mat(BayerRGIR.size()。height / 2,BayerRGIR.size()。width / 2,CV_8UC1);
//复制IR数据并将IR数据替换为G
for(int Row = 0; Row
for(int Col = 0; Col
//使用附近的绿色设置红外数据
BayerRGGB.at(Row + 1,Col)= BayerRGIR.at(Row,Col + 1);
//设置红外数据
IRimage.at(Row / 2,Col / 2)= BayerRGIR.at(Row + 1,Col);
}
}
返回true;
}
/ ***************************************************** ********************************** /