2015-01-11 3 views
0

Могу ли я использовать OpenCV для редактирования видео, снятого с камеры Ip с помощью Dahua SDK? Вот часть Dahua кода образца:OpenCV edit захватил ip-камеру

// initialized play list 
BOOL bOpenRet = PLAY_OpenStream(g_lRealPort, 0, 0, 1024 * 500); 
if (bOpenRet) 
{ 
    // start play 
    BOOL bPlayRet = PLAY_Play(g_lRealPort, hMainWnd); 
    if (bPlayRet) 
    { 
     // monitor preview 
     long lRealHandle = CLIENT_RealPlayEx(lLoginHandle, nChannelID, 0); 
     if (0 != lRealHandle) 
     { 
      // set recall function handling data 
      CLIENT_SetRealDataCallBackEx(lRealHandle, RealDataCallBackEx, (DWORD)0, 0x1f); 
     } 
     else 
     { 
      //printf("Fail to play!\n"); 
      PLAY_Stop(g_lRealPort); 
      PLAY_CloseStream(g_lRealPort); 
     } 
    } 
    else 
    { 
     PLAY_CloseStream(g_lRealPort); 
    } 
} 

Код выше подключается к кулачку с помощью TCP и потокового видео, задней вызов функции RealDataCallBackEx вызывается для потоковой передачи, можно отображать видео в окне , но как я могу позволить библиотеке OpenCV справиться с этим?

Вот код функции RealDataCallBackEx:

void __stdcall RealDataCallBackEx(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD  dwBufSize, LONG lParam, DWORD dwUser) 
    { 
    BOOL bInput = FALSE; 
    bInput = PLAY_InputData(g_lRealPort, pBuffer, dwBufSize); 
    } 
+0

Я не могу сказать, хотите ли вы использовать OpenCV для захвата и обработки данных вместо Dahua SDK или просто хотите обработать данные, уже записанные Dahua SDK. Можете ли вы указать? – Amadeusz

+0

Я не смог захватить с помощью OpenCV, поэтому я установил SDK. Теперь я могу использовать SDK, и я хочу обрабатывать с помощью OpenCV. Для захвата с использованием OpenCV мне нужен IP-адрес, я использовал утилиту iSpy для поиска захваченного IP-адреса, iSpy работает около 2 часов и ничего не нашел (cam ip is 192.168.1.108, порт 37777, user/pass - admin/admin) – MMSabbagh

ответ

0

Если IP-камера использует определенные стандарты, вы должны быть в состоянии захватить изображение, используя следующий код OpenCV (адаптировать, где это необходимо, я скопировал его из одного моих собственных программ). Я думаю, вы также можете проверить это, вставив URL-адрес в свой браузер с правильным ip, портом и логином. Я оставил порт на 88, потому что обычно вы можете отправлять эти команды для ip-камеры.

Mat returnFrame; 
string url = "http://"; 
url.append("192.168.1.108"); 
url.append(":88/cgi-bin/CGIProxy.fcgi?cmd=snapPicture2&usr="); 
url.append("admin"); 
url.append("&pwd="); 
url.append("admin"); 
VideoCapture cap(url); 
if (cap.isOpened()) { 
    Mat frame; 
    if (cap.read(frame) == false) { 
     cout << "Unable to grab frame" << endl; 
    } else returnFrame = frame.clone(); 
    cap.release(); 
} else cout << "Can't open URL" << endl; 
if (returnFrame.empty()) cout << "No frame to grab for cam!" << endl; 
else cout << "Cam Grabbed frame succesfully" << endl; 

Если вы хотите, чтобы включить буфер байт в OpenCV Мат вы можете использовать следующий код:

byte buf[] = new byte[100]; 
//fill buffer here 
Mat m = new Mat(1, 100, CvType.CV_8UC1); 
m.put(0, 0, buf); 

Обязательно определить размер и тип правильно. В этом примере это 1 канал Мата 1 х 100 пикселей.

+0

Я не могу найти IP-адрес, который может работать так, как вы упомянули, я потратил больше недели на поиск IP-адреса моего CAM! Я загрузил специальное хорошее программное обеспечение для поиска Ip под названием «iSpy», и вам не повезло. Таким образом, единственный способ - использовать сокеты tcp/udp, и он работал, и я могу отображать изображение в окне, используя код, упомянутый в моем вопросе, но вопрос в том, как я могу использовать тот же код для подачи OpenCV. – MMSabbagh

+0

Хорошо, я думал, что вы хотите захватить его с помощью OpenCV, но теперь я понимаю, что вы хотите превратить изображение из Дахуа в макет OpenCV? Тогда вы можете захотеть найти, как создать мат из данных RGB, например, в этом вопросе/ответе: http://stackoverflow.com/questions/22368312/creating-opencv-mat-from-user-data-results-in- image-with-circle-shifted-column –

+0

Благодарим за помощь, позвольте мне сказать, что я хочу передать данные в Mat! функция обратного вызова 'RealDataCallBackEx' отвечает за рисование фрейма (я добавил тело этого вызова обратно к моему вопросу выше), поэтому' BYTE * pBuffer' является потоком, кажется, содержит фрейм, как я могу преобразовать его в Matrix OpenCV ?? – MMSabbagh

Смежные вопросы