#python #opencv
#python #opencv
Вопрос:
Кто-нибудь знает, как использовать четыре канала в open cv. У меня есть эта rgb-ИК-камера от e con systems (См. 3cam_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. Проверьте наличие кадра, если он пуст, чтение не удалось. В противном случае API может не поддерживаться OCV. Последнее может быть более вероятным. В этом случае вам нужно будет установить API для вашей камеры и создать оболочку, которая преобразует необработанные данные с камеры в
cv::Mat
2. ПРИВЕТ @Croolman, большое тебе спасибо. Я искал на веб-сайте поставщика камеры. Они предоставляют некоторый исходный код и заголовочные файлы, но все они на C. Я разработал свой код на python и на самом деле не хочу переключаться на C. Итак, прямо сейчас я не знаю, как преобразовать строки кода, такие как follow, в python. #включить «opencv2 / video / tracking.hpp» # включить «opencv2 / imgproc / imgproc.hpp» # включить «opencv2 / highgui / highgui.hpp» Любая помощь действительно ценится. Спасибо!
3. Я нашел решение по этой ссылке. gist.github.com/bhive01/… See3cam не предоставляет никаких руководств по его использованию на python. Я надеюсь, что это поможет кому-то в будущем.
Ответ №1:
Вам нужно добавить приведенное ниже преобразование, чтобы разделить 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-канала bayer data
ConvertRGIR2RGGB(BayerFrame8, BayerFrame8, IRImage);
// Фактический формат Bayer BG, но Opencv использует BGR, а не RGB, поэтому принимает формат RG Bayer
cvtColor (BayerFrame8, BGRImage, COLOR_BayerRG2BGR);
namedWindow(«Рамка камеры BGR», WINDOW_AUTOSIZE);
imshow(«Рамка камеры BGR», BGRImage);
namedWindow(«ИК-рамка камеры», WINDOW_AUTOSIZE);
imshow(«ИК-рамка камеры», IRImage);
/*****************************************************************************/
// Фактический формат данных BGIRR после преобразования BGGR — IR заменяется на G
// ИК-данные собираются в виде отдельного изображения
bool ConvertRGIR2RGGB(Mat BayerRGIR, Mat amp; BayerRGGB, Mat amp;IRimage)
{
// Результирующее изображение после замены ИК-пикселя данными G
BayerRGGB = BayerRGIR.clone();
// IR данные будут вдвое меньше размера изображения
Bayer IRimage = Mat(BayerRGIR.size().height / 2, BayerRGIR.size().width / 2, CV_8UC1);
//копирование ИК-данных и замена ИК-данных на G
для (int Row = 0; Row < BayerRGIR.rows; Row = 2)
{
for (int Col = 0; Col < BayerRGIR.cols; Col = 2)
{
//Установите ИК-данные с соседним зеленым
BayerRGGB.at(строка 1, Col) = BayerRGIR.at (Строка, Col 1);
//Установка ИК-данных
IRimage.at (Строка / 2, Col / 2) = BayerRGIR.at (Строка 1, Col);
}
}
возвращает true;
}
/********************************************************************************/