﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天使的白骨-随笔分类-linux</title><link>http://www.cppblog.com/TianShiDeBaiGu/category/18772.html</link><description>给我一个EMACS，我不需要操作系统</description><language>zh-cn</language><lastBuildDate>Fri, 14 Apr 2017 03:04:11 GMT</lastBuildDate><pubDate>Fri, 14 Apr 2017 03:04:11 GMT</pubDate><ttl>60</ttl><item><title>tegra-tx1笔记，gstreamer抓取板载摄像头视频内容，并传给opencv代码层进行识别。</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2017/04/12/214835.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Wed, 12 Apr 2017 07:50:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2017/04/12/214835.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/214835.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2017/04/12/214835.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/214835.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/214835.html</trackback:ping><description><![CDATA[@import url(http://www.cppblog.com/CuteSoft_Client/CuteEditor/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css);
买了这个板子有好久了，去年放着没心思搞，今天觉得该干点事了。
<div>我的目标是要使用tx1上的摄像头来抓取视频帧并做识别。<br />
<div>首先，jetson tx-1的板载摄像头是不提供默认v4l2的驱动的，所以我自己给它找了驱动，但是这个驱动是基于gstreamer的。</div>
</div>
<div>所以，我整合了一套gstreamer的管道命令，如下：</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;">
<p style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Andale Mono'; color: #28fe14; background-color: rgba(0, 0, 0, 0.901961);"><span style="font-variant-ligatures: no-common-ligatures">export CLIENT_IP=127.0.0.1</span></p>
<p style="margin: 0px; font-size: 12px; line-height: normal; font-family: 'Andale Mono'; color: #28fe14; background-color: rgba(0, 0, 0, 0.901961);"><span style="font-variant-ligatures: no-common-ligatures">gst-launch-1.0 nvcamerasrc fpsRange="30 30" intent=3 ! nvvidconv flip-method=6 ! 'video/x-raw(memory:NVMM), width=(int)960, height=(int)540, format=(string)I420, framerate=(fraction)30/1' ! omxh264enc control-rate=2 bitrate=4000000 ! 'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! queue ! omxh264dec ! nvvidconv ! 'video/x-raw, format=(string)UYVY' ! videoconvert ! jpegenc quality=30 ! rtpjpegpay ! udpsink host=$CLIENT_IP port=5000 sync=false async=false</span></p>
</div>
</div>
<div><br />
</div>
<div>这段代码把摄像头上的内容抓取并压缩为960p的30帧的h264格式的视频流，并通过udp协议丢出到板卡的5000号端口上。</div>
<div>以上是gstreamer的服务器端，接下来，可以将内容抓取下来看看。</div>
<div><br />
</div>
<div>客户端的命令我就不写了，直接使用代码。这段代码是从youtube上的jetson的openCV教程组装来的，自己找了一下opencv处理gstreamer的API，搭上就可以用。</div>
<div><br />
</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->#include&nbsp;&lt;opencv2/highgui/highgui.hpp&gt;<br />
#include&nbsp;&lt;opencv2/opencv.hpp&gt;<br />
#include&nbsp;&lt;opencv2/imgproc/imgproc.hpp&gt;<br />
#include&nbsp;&lt;opencv2/features2d/features2d.hpp&gt;<br />
#include&nbsp;&lt;opencv2/calib3d/calib3d.hpp&gt;<br />
<br />
<span style="color: #0000FF; ">using</span>&nbsp;<span style="color: #0000FF; ">namespace</span>&nbsp;cv;<br />
<br />
<span style="color: #0000FF; ">int</span>&nbsp;main(<span style="color: #0000FF; ">int</span>,&nbsp;<span style="color: #0000FF; ">char</span>**)<br />
{<br />
&nbsp;&nbsp;VideoCapture&nbsp;input("./stream.sdp");<br />
&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!input.isOpened()){&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;check&nbsp;if&nbsp;we&nbsp;succeeded&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;&nbsp;"open&nbsp;failed"&nbsp;&lt;&lt;&nbsp;std::endl;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;-1;<br />
&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;Mat&nbsp;img,&nbsp;img_gray;<br />
&nbsp;&nbsp;OrbFeatureDetector&nbsp;detector(7000);<br />
&nbsp;&nbsp;vector&lt;KeyPoint&gt;&nbsp;img_keypoints,&nbsp;car_keypoints;<br />
&nbsp;&nbsp;Mat&nbsp;img_descriptors,&nbsp;car_descriptors;<br />
<br />
&nbsp;&nbsp;input.read(img);<br />
&nbsp;&nbsp;Mat&nbsp;car;<br />
&nbsp;&nbsp;img(Rect(400,&nbsp;320,&nbsp;150,&nbsp;100)).copyTo(car);<br />
<br />
&nbsp;&nbsp;detector(car,&nbsp;Mat(),&nbsp;car_keypoints,&nbsp;car_descriptors);<br />
&nbsp;&nbsp;drawKeypoints(car,&nbsp;car_keypoints,&nbsp;car);<br />
&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(;;)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(!input.read(img))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;detector(img,&nbsp;Mat(),&nbsp;img_keypoints,&nbsp;img_descriptors);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawKeypoints(img,&nbsp;img_keypoints,&nbsp;img);<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BFMatcher&nbsp;matcher;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;DMatch&gt;&nbsp;matches;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;matcher.match(car_descriptors,&nbsp;img_descriptors,&nbsp;matches);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;Point2f&gt;&nbsp;car_points,&nbsp;img_points;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>(<span style="color: #0000FF; ">int</span>&nbsp;i=0;&nbsp;i&nbsp;&lt;&nbsp;matches.size();&nbsp;++i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car_points.push_back(car_keypoints[matches[i].queryIdx].pt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img_points.push_back(img_keypoints[matches[i].queryIdx].pt);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&lt;&lt;"car&nbsp;points&nbsp;count&nbsp;=&nbsp;"&nbsp;&lt;&lt;&nbsp;car_points.size()&nbsp;&lt;&lt;&nbsp;std::endl;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(car_points.size()&nbsp;&gt;=&nbsp;4){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Matx33f&nbsp;H&nbsp;=&nbsp;findHomography(car_points,&nbsp;img_points,&nbsp;CV_RANSAC);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;Point&gt;&nbsp;car_border,&nbsp;img_border;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car_border.push_back(Point(0,&nbsp;0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car_border.push_back(Point(0,&nbsp;car.rows));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car_border.push_back(Point(car.cols,&nbsp;car.rows));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;car_border.push_back(Point(car.cols,&nbsp;0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(size_t&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;car_border.size();&nbsp;++i){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Vec3f&nbsp;p&nbsp;=&nbsp;H&nbsp;*&nbsp;Vec3f(car_border[i].x,&nbsp;car_border[i].y,&nbsp;1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img_border.push_back(Point(p[0]/p[2],&nbsp;p[1]/p[2]));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;polylines(img,&nbsp;img_border,&nbsp;<span style="color: #0000FF; ">true</span>,&nbsp;CV_RGB(255,&nbsp;255,&nbsp;0));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mat&nbsp;img_matches;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;drawMatches(car,&nbsp;car_keypoints,&nbsp;img,&nbsp;img_keypoints,&nbsp;matches,&nbsp;img_matches);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;imshow("img_matches",&nbsp;img_matches);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;imshow("car",&nbsp;car);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;imshow("img",&nbsp;img);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(waitKey(27)&nbsp;&gt;=&nbsp;0)&nbsp;<span style="color: #0000FF; ">break</span>;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;the&nbsp;camera&nbsp;will&nbsp;be&nbsp;deinitialized&nbsp;automatically&nbsp;in&nbsp;VideoCapture&nbsp;destructor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; "><br />
</span>&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;0;<br />
}</div>
</div>
<div>编译的makefile会麻烦一点：先写一个cmake的配置文件<span style="color: #28fe14; font-family: 'Andale Mono'; font-size: 12px; background-color: rgba(0, 0, 0, 0.901961);">CMakeLists.txt</span></div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->cmake_minimum_required(VERSION&nbsp;2.8)<br />
<br />
project(hello)<br />
<br />
find_package(OpenCV&nbsp;REQUIRED)<br />
<br />
include_directories(${OpenCV_INCLUDE_DIRS})<br />
<br />
add_executable(cv_hello&nbsp;hello.cpp)<br />
<br />
target_link_libraries(cv_hello&nbsp;${OpenCV_LIBS})</div>
</div>
<div><span style="color: #28fe14; font-family: 'Andale Mono'; font-size: 12px; background-color: rgba(0, 0, 0, 0.901961);"><br />
</span></div>
<div><font color="#28fe14" face="Andale Mono"><span style="font-size: 12px; background-color: rgba(0, 0, 0, 0.901961);">执行命令:cmake &nbsp;./ &amp;&amp; make</span></font></div>
<div>然后生成cv_hello，可以执行。</div>
<div>关键配置文件是stream.sdp文件，这个文件帮我减少了命令行的麻烦。内容如下：</div>
<div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->[stream.sdp]<br />
c=IN&nbsp;IP4&nbsp;127.0.0.1<br />
m=video&nbsp;5000&nbsp;RTP/AVP&nbsp;96<br />
a=rtpmap:96&nbsp;JPEG/4000000</div>
</div>
<div><br />
</div>
<div>全部内容结束。可以看到摄像头的视频内容了</div>
<div><br />
</div><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/214835.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2017-04-12 15:50 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2017/04/12/214835.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GC的三种方式，读ruby之父写的《编程语言的过去、现在和未来》笔记</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2014/01/17/205450.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Fri, 17 Jan 2014 12:17:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2014/01/17/205450.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/205450.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2014/01/17/205450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/205450.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/205450.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cppblog.com/TianShiDeBaiGu/archive/2014/01/17/205450.html'>阅读全文</a><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/205450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2014-01-17 20:17 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2014/01/17/205450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>移植Linux的外围设备驱动到QNX系统中</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2013/04/09/Driver__Linux_to_qnx.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Tue, 09 Apr 2013 02:40:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2013/04/09/Driver__Linux_to_qnx.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/199258.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2013/04/09/Driver__Linux_to_qnx.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/199258.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/199258.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 网络上还没有Linux驱动移植到到QNX的资料，因此我打算自己写一个，一方面自己日后忘记了可以回顾，另一方面可以帮助新人更快的解决问题。&nbsp;&nbsp;<a href='http://www.cppblog.com/TianShiDeBaiGu/archive/2013/04/09/Driver__Linux_to_qnx.html'>阅读全文</a><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/199258.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2013-04-09 10:40 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2013/04/09/Driver__Linux_to_qnx.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux同一个系统搭建两个apache服务器， apache2(_ssl)+svn多仓库配置_____lamp+bugfree（禅道前身）</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/09/18/apache_ssl_svn_____lamp_bugfree.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Tue, 18 Sep 2012 05:01:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/09/18/apache_ssl_svn_____lamp_bugfree.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/191092.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/09/18/apache_ssl_svn_____lamp_bugfree.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/191092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/191092.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 公司要求我维护服务器，配置同时使用两个apache客户端提供不同的服务是比较麻烦的问题。<br>花了两周测试svn和bugfree的搭建，写在这里自己以后可以看，希望对大家有所帮助<br>svn多仓库同时使用，多个apache同时运行，bug版本管理，源代码版本管理，linux维护&nbsp;&nbsp;<a href='http://www.cppblog.com/TianShiDeBaiGu/archive/2012/09/18/apache_ssl_svn_____lamp_bugfree.html'>阅读全文</a><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/191092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2012-09-18 13:01 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2012/09/18/apache_ssl_svn_____lamp_bugfree.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gdb 调试总结</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/02/16/gdb.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Thu, 16 Feb 2012 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/02/16/gdb.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/165758.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2012/02/16/gdb.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/165758.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/165758.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: gdb常规调试技巧，多线程，多进程调试&nbsp;&nbsp;<a href='http://www.cppblog.com/TianShiDeBaiGu/archive/2012/02/16/gdb.html'>阅读全文</a><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/165758.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2012-02-16 17:08 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2012/02/16/gdb.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>fedora 安装显卡驱动，设置分辨率，安装QQ  ,音乐播放器,电影播放器  ，WIN 7下的全部字体,mysql error:2002,EMACS启动错误 GLib-GIO:ERROR:</title><link>http://www.cppblog.com/TianShiDeBaiGu/archive/2010/05/04/heqinglong.html</link><dc:creator>何清龙</dc:creator><author>何清龙</author><pubDate>Tue, 04 May 2010 11:11:00 GMT</pubDate><guid>http://www.cppblog.com/TianShiDeBaiGu/archive/2010/05/04/heqinglong.html</guid><wfw:comment>http://www.cppblog.com/TianShiDeBaiGu/comments/114360.html</wfw:comment><comments>http://www.cppblog.com/TianShiDeBaiGu/archive/2010/05/04/heqinglong.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/TianShiDeBaiGu/comments/commentRss/114360.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TianShiDeBaiGu/services/trackbacks/114360.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: fedora 14-显卡驱动，WIN 7 字体，LINUX QQ，linux音乐播放器,设置显示分辨率，播放器，yum多线程工具，MYSQL：ERROR 2002, EMACS启动错误GLib-GIO:ERROR:gdbusconnection.c:2270&nbsp;&nbsp;<a href='http://www.cppblog.com/TianShiDeBaiGu/archive/2010/05/04/heqinglong.html'>阅读全文</a><img src ="http://www.cppblog.com/TianShiDeBaiGu/aggbug/114360.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TianShiDeBaiGu/" target="_blank">何清龙</a> 2010-05-04 19:11 <a href="http://www.cppblog.com/TianShiDeBaiGu/archive/2010/05/04/heqinglong.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>