日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络摄像头实时获取信息

發(fā)布時(shí)間:2023/12/4 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络摄像头实时获取信息 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自:http://blog.csdn.net/yong_hen/article/details/42460387#quote

轉(zhuǎn)自:http://blog.csdn.net/leo2007608/article/details/9885219

代碼:

openCV版本:2.4.10.

平臺(tái):win7

[cpp]?view plaincopy
  • #include?<opencv2/core/core.hpp>??
  • #include?<opencv2/highgui/highgui.hpp>??
  • #include?<opencv2/imgproc/imgproc.hpp>??
  • ??
  • void?constructionPerspectiveMat(CvSize?size,?cv::Mat?&warp_mat)??
  • {??
  • ????cv::Point2f?srcTri[4],?dstTri[4];?//二維坐標(biāo)下的點(diǎn),類型為浮點(diǎn)????
  • ????//計(jì)算矩陣仿射變換????
  • ????srcTri[0].x?=?0;??
  • ????srcTri[0].y?=?0;??
  • ????srcTri[1].x?=?size.width?-?1.0f;??//縮小一個(gè)像素????
  • ????srcTri[1].y?=?0;??
  • ????srcTri[2].x?=?0;??
  • ????srcTri[2].y?=?size.height?-?1.0f;??
  • ????srcTri[3].x?=?size.width?-?1.0f;??//bot?right????
  • ????srcTri[3].y?=?size.height?-?1.0f;??
  • ??
  • ????//改變目標(biāo)圖像大小??
  • ????//請(qǐng)注意,DstTri[i]對(duì)應(yīng)SrcTri[i]。并不是說DstTri[0]就一定是LT。??
  • ????dstTri[0].x?=?0?*?1.0f;??
  • ????dstTri[0].y?=?0?*?1.0f;??
  • ????dstTri[1].x?=?srcTri[1].x?*?1.0f?-?50;??
  • ????dstTri[1].y?=?100?*?1.0f;??
  • ????dstTri[2].x?=?100?*?1.0f;??
  • ????dstTri[2].y?=?srcTri[2].y?*?1.0f;??
  • ????dstTri[3].x?=?srcTri[3].x?*?1.0f;??
  • ????dstTri[3].y?=?srcTri[3].y?*?1.0f;??
  • ??????
  • ????warp_mat?=?cv::getPerspectiveTransform(srcTri,?dstTri);??
  • }??
  • ??
  • int?main(int?argc,?char?*argv[])??
  • {??
  • ????cv::VideoCapture?capture(argv[1]);??
  • ??
  • ????if?(!capture.isOpened())?{??
  • ????????//Error??
  • ????}??
  • ??
  • ????cv::Mat?frame,?Dst,?WarpMat;??
  • ??
  • ????capture.read(frame);??
  • ????CvSize?size;??
  • ????size.width?=?frame.cols;??
  • ????size.height?=?frame.rows;??
  • ????WarpMat.create(cvSize(3,?3),?CV_32FC1);??
  • ????constructionPerspectiveMat(size,?WarpMat);??
  • ??????
  • ????cv::namedWindow("TEST",?CV_WINDOW_AUTOSIZE);??
  • ????int?i?=?1000;??
  • ????while?(--i)?{??
  • ????????if?(!capture.read(frame))?{??
  • ????????????//Error??
  • ????????}??
  • ??
  • ????????cv::warpPerspective(frame,?Dst,?WarpMat,?size);??
  • ????????cv::imshow("TEST",?Dst);??
  • ??
  • ????????cv::waitKey(30);??
  • ????}??
  • } ?
  • 相關(guān)問題:

    要解決問題:

    ?opencv無法正常回放視頻(原因是VideoCapture::set 函數(shù)里只有一種關(guān)鍵幀模式,詳情參見《OpenCV 2.3.1 中關(guān)于cvCaptureProperty()定位不準(zhǔn)的問題》)


    解決方案:

    上面給出的鏈接文章已經(jīng)給出了這一問題的解決方案,但是過于籠統(tǒng)(我懷疑他們應(yīng)該是使用的linux系統(tǒng)),在windows下這一編譯過程可以用坑爹來形容。好吧,讓我們來回顧一下這一坑爹之旅。

    1 要修改的代碼部分請(qǐng)參見OpenCV 2.3.1 中關(guān)于cvCaptureProperty()定位不準(zhǔn)的問題?這里不再重復(fù)

    2 關(guān)鍵的問題來了:我在windows下使用cmake安裝opencv的時(shí)候,根本就沒有WITH_FFMPEG這個(gè)選項(xiàng),而在網(wǎng)上查到的解決方案都是通過修改cmake而直接搞定的,簡(jiǎn)直可謂是輕松愉快加嗨皮?,下面給出windows下需要修改的一些內(nèi)容。

    2.1 先說ffmpeg的下載安裝。由于一開始不是很清楚,就去ffmpeg的網(wǎng)站上下了最新版本編譯好的程序,結(jié)果死活有函數(shù)找不到。后來google后發(fā)現(xiàn),原來是因?yàn)閛pencv使用的是0.7x版本的ffmpeg,下載的時(shí)候大家注意一下。http://ffmpeg.zeranoe.com/builds/在這里下載,我是懶人,我下的編譯完的版本。下載完,你怎么配置環(huán)境變量我就不管了,反正最后重新編譯opencv時(shí)你能想起來就行。

    2.2 然后我們可以打開opencv文件夾下面?CMakeLists.txt 這個(gè)文件發(fā)現(xiàn)

    [html]?view plaincopy
  • if(UNIX)??
  • ????set(WITH_FFMPEG?ON?CACHE?BOOL?"Include?FFMPEG?support")??
  • ????if(NOT?APPLE)??
  • ????????set(WITH_UNICAP?OFF?CACHE?BOOL?"Include?Unicap?support?(GPL)")??
  • ????????set(WITH_GTK?ON?CACHE?BOOL?"Include?GTK?support")??
  • ????????set(WITH_GSTREAMER?ON?CACHE?BOOL?"Include?Gstreamer?support")??
  • ????????set(WITH_V4L?ON?CACHE?BOOL?"Include?Video?4?Linux?support")??
  • ????????set(WITH_XINE?OFF?CACHE?BOOL?"Include?Xine?support?(GPL)")??
  • ????endif()??
  • ????set(WITH_PVAPI?ON?CACHE?BOOL?"Include?Prosilica?GigE?support")??
  • ????set(WITH_1394?ON?CACHE?BOOL?"Include?IEEE1394?support")??
  • endif()??
  • 通過上面代碼可以看出來,只有在UNIX環(huán)境下才會(huì)有WITH_FFMPEG這個(gè)選項(xiàng),好吧,往下的牛人可以直接修改這個(gè)txt了,來構(gòu)造自己的cmakelist文件,可惜我對(duì)cmake不是很熟,不是很敢修改這些代碼,于是乎我就采用了一個(gè)笨一些的方法,手動(dòng)去修改cmake生成的項(xiàng)目配置文件

    找到opencv_highgui這個(gè)項(xiàng)目,打開cap_ffmpeg.cpp文件,你會(huì)發(fā)現(xiàn)這么一段預(yù)編譯代碼

    [html]?view plaincopy
  • #ifdef?HAVE_FFMPEG??
  • #include?"cap_ffmpeg_impl.hpp"??
  • #else??
  • #include?"cap_ffmpeg_api.hpp"??
  • #endif??
  • 由于windows下的CMAKE沒有預(yù)定義HAVE_FFMPEG 所以說我們需要在預(yù)編譯指令里面加上HAVE_FFMPEG,位置在項(xiàng)目->屬性-> c++ ->預(yù)處理器定義

    2.3?下一步是將你的ffmpeg庫(kù)的include文件夾加到highgui項(xiàng)目中去,不想細(xì)說了,還有就是ffmpeg中的靜態(tài)鏈接庫(kù)。這些沒有什么難度。然后編譯一下,ok,滿屏的錯(cuò)誤。

    轉(zhuǎn)到cap_ffmpeg_impl.hpp文件,大部分的錯(cuò)誤是從這里來的

    2.3.1?找不到msinttypes.h文件 上這里下載?http://code.google.com/p/msinttypes/?然后塞進(jìn)項(xiàng)目去就行了。

    2.3.2?INT64_C,?UINT64_C 沒定義, 自己定義一下就可以了。在文件中加入

    [html]?view plaincopy
  • #define?INT64_C??
  • #define?UINT64_C??
  • 2.3.3 如果提示av_open_input_file 找不到,恭喜你,你沒好好看前面的內(nèi)容,你下錯(cuò)ffmpeg啦~~ 要 0.7x 版本~~

    2.3.4 如果報(bào)錯(cuò) snprintf 這個(gè)函數(shù)找不到,我不知道這個(gè)函數(shù)在那個(gè)頭文件里,我加上了<stdio>結(jié)果沒找到,如果你知道的話就加上對(duì)應(yīng)頭文件就好了。或者你可以像我似的,使用一個(gè)把這個(gè)函數(shù)改成sprintf版本

    [html]?view plaincopy
  • //snprintf(oc->filename,?sizeof(oc->filename),?"%s",?filename);??
  • ????sprintf(oc->filename,?filename,?"%s");??
  • 2.3.5 我就遇到了4個(gè)要修改的地方,如果你又遇到別的錯(cuò)誤,那只好自己慢慢修改了。

    2.3.6 重新編譯highgui項(xiàng)目,替換原有的lib,dll文件。

    2.3.7 PS, 貌似還需要?jiǎng)h除opencv_ffmpeg.dll文件,這樣才能調(diào)用正確的幀跳轉(zhuǎn)方法,但是刪除opencv_ffmpeg后,程序就無法讀取非avi類型媒體文件。 目前原因不明,有時(shí)間在慢慢鼓搗吧。


    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的网络摄像头实时获取信息的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。