如何在开放式简历中捕获具有四个通道(RGB-IR)的视频?

时间:2019-04-18 08:39:26

标签: python opencv

有人知道如何在开放式简历中使用四个频道。我有一个来自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()

1 个答案:

答案 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;
}

/ ***************************************************** ********************************** /