2015年9月6日 星期日

在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 顯示 IPCam 串流視頻

Windows XP Visual Studio 2010 使用 OpenCV 2.4 顯示 IPCam 串流視頻 

OpenWrt 系統已經測試了奧尼(Aoni)百腦通相影 HD720P 高清網絡攝像頭(Webcam),但影像是從 TP-Link TL-WR703N MJPG-Streamer 程式通過 http協議傳輸到瀏覽器(Web Browser),並顯示串流視頻(Streaming Video),筆者下一步希望將串流視頻作圖像處理,所以需要使用到電腦視覺庫,便可以作識別和圖像處理,現在比較流行的電腦視覺庫有 OpenCVOpen Source Computer Vision Library)、AForgeEmgu CVFFmpeg 等等,筆者會先使用 OpenCV 電腦視覺庫。

OpenCV IPCam Capture 程式
1筆者會使用 Visual Studio 2010 並且安裝 OpenCV 2.4 電腦視覺庫,用 OpenCV 對路由器傳輸作圖像處理,首先要從路由器取得串流視頻或圖像,OpenCV 裏的 VideoCapture 類本身就能從網頁獲取圖像,不斷把採集的圖像顯示在屏幕上。

C++ IPCam Capture 程式:
// 06_opencv_ipcam.cpp : 定義主控台應用程式的進入點。
// Test OpenCV and IP Camera to Capture Video from TL-WR703N OpenWrt

#include "stdafx.h"
#include highgui.h
#include "opencv2/imgproc/imgproc.hpp"
#include iostream
#include stdio.h

using namespace std;
using namespace cv;

/** @function main */
int main(int argc, char** argv)
{
        Mat src;
        cv::VideoCapture vcap;   //Capture的宣告

        // 創造虛擬檔案和 IP 地址
        const string address = "http://192.168.1.1:8080/?action=stream?dummy=param.mjpg";

        if (!vcap.open(address))   //確認Capture能開啓
        {
                cout << "Error Opening Video Stream" << endl;
                return -1;
        }
                cout << "Stream Opened" << endl;

        while (1)
        {
                vcap >> src;
                // Write your code here
                // Show your results
                namedWindow("Cam", CV_WINDOW_AUTOSIZE);
                imshow("Cam", src);

                // Press ESC to exit
                if (waitKey(33) == 27)   //避免CPU負荷,給點Delay時間
                        break;
        }
        return 0;
}

2由於 OpenCV 主要針對的是電腦視覺方面的處理,因此在函數庫中,最重要的結構體是 IplImage 結構。IplImage 結構來源於 Intel 的另外一個函數庫 Intel Image Processing Library (IPL),該函數庫主要是針對圖像處理,在 IplImage 資料結構裡面有很多的變數,而他的數值大多都被 IplImage 專用的函數初始化,所以不太需要用到它資料結構裡面的資料,以及直接設定它資料結構的數據。

IplImage 函數的 IPCam Capture 程式:
// 06_opencv_ipcam.cpp : 定義主控台應用程式的進入點。
// Test OpenCV and IP Camera to Capture Video from TL-WR703N OpenWrt

#include "stdafx.h"
#include highgui.h
#include "opencv2/imgproc/imgproc.hpp"
#include iostream
#include stdio.h

using namespace std;
using namespace cv;

/** @function main */
int main(int argc, char** argv)
{
    CvCapture* capture = cvCaptureFromFile("http://192.168.1.1:8080/?action=stream?dummy=param.mjpg");
    IplImage* frame;   // IplImage的宣告
    cvNamedWindow("frame");
    while(frame = cvQueryFrame(capture))   //確認Capture能開啓
    {
    cvShowImage("frame",frame);   //顯示Capture
    cvWaitKey(33);   //避免CPU負荷,給點Delay時間
    }
    cvReleaseCapture(&capture);
    cvDestroyAllWindows();
    return 0;

}

IplImage 函數的 OpenCV IPCam Capture 程式
操作系統:Windows XP 32-bit 
操作環境:Windows Visual Studio 2010 C++/CLI + OpenCV 2.4.8

相關網址:
※ 在 Windows XP Visual Studio 2010 安裝 OpenCV 2.4
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 第一個程式
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 使用 WebCam
※ 在 Windows XP Visual Studio 2010 安裝使用 FFmpeg 函數庫
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 使用 WebCam
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 顯示 IPCam 串流視頻
※ 在 Windows XP Visual Studio 2010 使用 OpenCV 2.4 導入屬性工作表文件檔
※ 在 Windows XP Visual Studio 2010 使用 Windows From OpenCV 2.4 配置
※ 在 OpenCV 2.4 的 IplImage 資料結構
※ OpenCV 2.4 的坎尼圖像邊緣檢測(Canny Edge Detection) – Canny 函數
※ OpenCV 2.4 的霍夫直線偵測轉換 – HoughLines 函數
※ OpenCV 2.4 的霍夫直線偵測轉換 – HoughLinesP 函數
※ OpenCV 2.4 的人臉偵測(Face Detection)– cvHaarDetectObjects 函數
※ OpenCV 2.4 的物件偵測(Object Detection)– cvHoughCircles 函數
※ OpenCV 2.4 的物件追蹤(Object Tracking)– cvMoments 函數

2015 年 9月 6日 天氣報告
氣溫:28.5@ 20:30
相對濕度:百分之 80%
天氣:天色大致良好

沒有留言:

張貼留言