<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7908064383434805455</id><updated>2012-02-27T13:27:43.055-08:00</updated><title type='text'>Robotics@Cyborg</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>20</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-1081689577461156487</id><published>2012-02-09T06:16:00.000-08:00</published><updated>2012-02-09T06:16:43.244-08:00</updated><title type='text'>Go-visible</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Finally got my kinect to work, thanks to the CL NUI library :)&lt;br /&gt;I am now able to access the image as well as the depth map from the kinect, in rgb format.&lt;br /&gt;&lt;br /&gt;This is the first thing that I am trying with my kinect. What I have done is thresholding the depth map to find objects within a particular image.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-75771318ecefc8d1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v1.nonxt1.googlevideo.com/videoplayback?id%3D75771318ecefc8d1%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6CC9D2CE25C2CCDA1E2DD574D39C4CBF0C86C12C.10A3D7AB850C3D7FCAFB3AC153CB5628EEABE026%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D75771318ecefc8d1%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7e0v1ii8w1wpb3TxmxPGbpinpgY&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v1.nonxt1.googlevideo.com/videoplayback?id%3D75771318ecefc8d1%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6CC9D2CE25C2CCDA1E2DD574D39C4CBF0C86C12C.10A3D7AB850C3D7FCAFB3AC153CB5628EEABE026%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D75771318ecefc8d1%26offsetms%3D5000%26itag%3Dw160%26sigh%3D7e0v1ii8w1wpb3TxmxPGbpinpgY&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-1081689577461156487?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/1081689577461156487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2012/02/go-visible.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/1081689577461156487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/1081689577461156487'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2012/02/go-visible.html' title='Go-visible'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-644421404108856244</id><published>2011-12-03T08:48:00.000-08:00</published><updated>2011-12-03T08:48:55.903-08:00</updated><title type='text'>Virtual keyboard</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Today virtual projection keyboards are a craze. It is used as modules which can be connected to computers like the cellulon projection keyboard, are used in mobile, PDA's, and small equipments, where space is very small forcomputing.&lt;div&gt;I, myself am dying to have one. So, inspired by it, I take it as my seminar topic.&amp;nbsp;I was much interested in making one myself also, but I didnt have either the red laser diode projector or the IR laser diode for the detection plane. So, I made a short program in OPENCV to immitate it, by just taking 11 keys.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-c8c4f52e596563ec" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v7.nonxt2.googlevideo.com/videoplayback?id%3Dc8c4f52e596563ec%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D322EEF7A9999BE4439A48491504F5128EFF9100B.416386C52FF0404129C8C9034B974D7938E0BACD%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc8c4f52e596563ec%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dq-EmJZlle6nMjcbQmGlRG0PNxgU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v7.nonxt2.googlevideo.com/videoplayback?id%3Dc8c4f52e596563ec%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D322EEF7A9999BE4439A48491504F5128EFF9100B.416386C52FF0404129C8C9034B974D7938E0BACD%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Dc8c4f52e596563ec%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dq-EmJZlle6nMjcbQmGlRG0PNxgU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The text being typed can be seen at the bottom of the video.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;I have used color marker on fingers along with blob detection to get these results.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-644421404108856244?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/644421404108856244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/12/virtual-keyboard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/644421404108856244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/644421404108856244'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/12/virtual-keyboard.html' title='Virtual keyboard'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-6886785555290448707</id><published>2011-12-03T06:32:00.000-08:00</published><updated>2011-12-03T06:35:10.529-08:00</updated><title type='text'>My new Kinect :)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hiii friends.&lt;br /&gt;Finally I was able to get myself a kinect.&lt;br /&gt;&lt;b&gt;Kinect&lt;/b&gt; is a&amp;nbsp; motion sensing input device developed by Microsoft for the &lt;a href="http://en.wikipedia.org/wiki/Xbox_360" title="Xbox 360"&gt;&lt;/a&gt;Xbox 360 gaming console. Based around a &lt;a href="http://en.wikipedia.org/wiki/Webcam" title="Webcam"&gt;webcam&lt;/a&gt;-style add-on &lt;a href="http://en.wikipedia.org/wiki/Peripheral" title="Peripheral"&gt;peripheral&lt;/a&gt; for the Xbox 360 console, it enables users to control and interact with the Xbox 360 without the need to touch a &lt;a href="http://en.wikipedia.org/wiki/Game_controller" title="Game controller"&gt;game controller&lt;/a&gt;, through a &lt;a href="http://en.wikipedia.org/wiki/Natural_user_interface" title="Natural user interface"&gt;natural user interface&lt;/a&gt; using gestures and &lt;a href="http://en.wikipedia.org/wiki/Speech_recognition" title="Speech recognition"&gt;spoken commands&lt;/a&gt;.&lt;br /&gt;Now, it is also being used with P.Cs for developing applications for kinect for easier Human computer interaction systems. &lt;br /&gt;There's a trio of hardware innovations working together within the Kinect sensor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Color VGA video camera&lt;/b&gt;  - This video camera aids in facial recognition and other detection  features by detecting three color components: red, green and blue.  Microsoft calls this an "RGB camera" referring to the color components  it detects.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Depth sensor&lt;/b&gt; - An infrared  projector and a monochrome CMOS (complimentary metal-oxide  semiconductor) sensor work together to "see" the room in 3-D regardless  of the lighting conditions.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Multi-array microphone&lt;/b&gt;  - This is an array of four microphones that can isolate the voices of  the players from the noise in the room. This allows the player to be a  few feet away from the microphone and still use voice controls.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp; This is the snapshot of my kinect :)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Lupcp-2HqCc/Ttouj6IP3LI/AAAAAAAAAJA/xvFHtZQVnDM/s1600/DSC00259.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-Lupcp-2HqCc/Ttouj6IP3LI/AAAAAAAAAJA/xvFHtZQVnDM/s320/DSC00259.jpg" width="320" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;While I was trying to figure out how to use it, I came across &lt;b&gt;CL NUI platform&lt;/b&gt; for kinect users, at &lt;a href="http://codelaboratories.com/downloads/"&gt;http://codelaboratories.com/downloads/&amp;nbsp; &lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;It was just cool. There is no command line required to use it. All u have to do is plug in your kinect, install it and run it. It gives you the functionality to see the image of camera, the depth data. Moreover, it also has the feature to move the kinect to face up and down to some angle using motors, which was really cool.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-875bb204d7a07887" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v2.nonxt1.googlevideo.com/videoplayback?id%3D875bb204d7a07887%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DC1EB5A435D261CB1C5A12BA9565A577406391D0.1CEA8EF31F79679DEA51FFE7480D591B3F96FBB4%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D875bb204d7a07887%26offsetms%3D5000%26itag%3Dw160%26sigh%3D_6cyhpz-Y5MzeM9nN_6P5N8U2Ts&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v2.nonxt1.googlevideo.com/videoplayback?id%3D875bb204d7a07887%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DC1EB5A435D261CB1C5A12BA9565A577406391D0.1CEA8EF31F79679DEA51FFE7480D591B3F96FBB4%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D875bb204d7a07887%26offsetms%3D5000%26itag%3Dw160%26sigh%3D_6cyhpz-Y5MzeM9nN_6P5N8U2Ts&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-9cfd8c20b858176" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v5.nonxt3.googlevideo.com/videoplayback?id%3D09cfd8c20b858176%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D716899352A5CD7E5B42B18AE41AFA378C53C11F4.70BD01EF8C07973D408A04ACB2F5D9469BB6DC70%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D9cfd8c20b858176%26offsetms%3D5000%26itag%3Dw160%26sigh%3DDmZxTLHAAy5swzk12mksF6AoOi4&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v5.nonxt3.googlevideo.com/videoplayback?id%3D09cfd8c20b858176%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D716899352A5CD7E5B42B18AE41AFA378C53C11F4.70BD01EF8C07973D408A04ACB2F5D9469BB6DC70%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D9cfd8c20b858176%26offsetms%3D5000%26itag%3Dw160%26sigh%3DDmZxTLHAAy5swzk12mksF6AoOi4&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-6886785555290448707?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/6886785555290448707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/12/my-new-kinect.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6886785555290448707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6886785555290448707'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/12/my-new-kinect.html' title='My new Kinect :)'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Lupcp-2HqCc/Ttouj6IP3LI/AAAAAAAAAJA/xvFHtZQVnDM/s72-c/DSC00259.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-4988150541818563748</id><published>2011-07-29T13:14:00.000-07:00</published><updated>2011-07-29T13:26:23.708-07:00</updated><title type='text'>U.G.V(Unmanned Ground Vehicle)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;It started with the&lt;b&gt; "DRDO DRIVING INNOVATION STUDENT ROBOTICS COMPETITION 2010"&lt;/b&gt;. This is where everything started, it has been one hell of a time since then.&amp;nbsp; &lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The basic requirements for making a UGV are:&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;Camera - to take visual input and find the path.&lt;/li&gt;&lt;li&gt;Laser range detector - for detecting obstacles and avoiding them.&lt;/li&gt;&lt;li&gt;Locomotion system or the chasis along with motors and wheels for making the bot move.&lt;/li&gt;&lt;li&gt;GPS- for tracking its position.&lt;/li&gt;&lt;li&gt; Wireless module for E-Stop.&lt;/li&gt;&lt;li&gt;A team with madly interested people. In my case, our team consisted of my friends&lt;b&gt; Deepankar, Gigyanshu, Rahul, Keshav and Abhishek&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;A lot of night outs and workshop deliveries :)&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;We started off with Matlab. But as it was very slow, we switched on to OpenCV.&lt;br /&gt;This is the video of our UGV following the lane.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-2eed299bd55b4a34" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v2.nonxt5.googlevideo.com/videoplayback?id%3D2eed299bd55b4a34%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1C0A1DFDED05DCBE85D903E59EA58E7A08A4EEEE.4FA16416EBD299C88957B7AFE792C191063A95E7%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D2eed299bd55b4a34%26offsetms%3D5000%26itag%3Dw160%26sigh%3D_OA0bXNqQamg1dXntxyCe7qthms&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v2.nonxt5.googlevideo.com/videoplayback?id%3D2eed299bd55b4a34%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1C0A1DFDED05DCBE85D903E59EA58E7A08A4EEEE.4FA16416EBD299C88957B7AFE792C191063A95E7%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D2eed299bd55b4a34%26offsetms%3D5000%26itag%3Dw160%26sigh%3D_OA0bXNqQamg1dXntxyCe7qthms&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;An example of lane detection by our UGV can be seen below:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-b3b7608d6a623cdb" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v21.nonxt1.googlevideo.com/videoplayback?id%3Db3b7608d6a623cdb%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6D05F5EB98D07B068FD8B3E093781D4ED4EF7385.73846B749BE4D8C26B6BFBE60D7FFE078DB74F5D%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db3b7608d6a623cdb%26offsetms%3D5000%26itag%3Dw160%26sigh%3DC8GYdFZObTxiR6Vhadwn_GGyNh4&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v21.nonxt1.googlevideo.com/videoplayback?id%3Db3b7608d6a623cdb%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6D05F5EB98D07B068FD8B3E093781D4ED4EF7385.73846B749BE4D8C26B6BFBE60D7FFE078DB74F5D%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db3b7608d6a623cdb%26offsetms%3D5000%26itag%3Dw160%26sigh%3DC8GYdFZObTxiR6Vhadwn_GGyNh4&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;In the video, the bot is working only through lane detection and there is Wireless E-Stop for emergency.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Now, we have added the obstacle detection and avoidance to it, as well as GPS tracking.&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Next time I will be posting the videos regaurding obstacle avoidance, and other modifiactions to it..&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Untill then....Next time.....&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-4988150541818563748?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/4988150541818563748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/ugvunmanned-ground-vehicle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4988150541818563748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4988150541818563748'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/ugvunmanned-ground-vehicle.html' title='U.G.V(Unmanned Ground Vehicle)'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-8753175197542264460</id><published>2011-07-29T08:48:00.000-07:00</published><updated>2011-07-29T08:48:15.112-07:00</updated><title type='text'>Augmented reality</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I have been trying to do augmented reality since a long time, and while surfing, I came across the &lt;b&gt;ARToolkit&lt;/b&gt; and &lt;b&gt;SUDARA&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-413242904e6cb101" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v12.nonxt1.googlevideo.com/videoplayback?id%3D413242904e6cb101%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4427AB556DBA0FDFBCA3596D1A3BA84164DF1E4F.21485E7FF111281E094924727AF2BF32342DBE9C%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D413242904e6cb101%26offsetms%3D5000%26itag%3Dw160%26sigh%3DhlGOCmSXeupuRV8S7Np6zBOsnEw&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v12.nonxt1.googlevideo.com/videoplayback?id%3D413242904e6cb101%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4427AB556DBA0FDFBCA3596D1A3BA84164DF1E4F.21485E7FF111281E094924727AF2BF32342DBE9C%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D413242904e6cb101%26offsetms%3D5000%26itag%3Dw160%26sigh%3DhlGOCmSXeupuRV8S7Np6zBOsnEw&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-8753175197542264460?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/8753175197542264460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/augmented-reality.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/8753175197542264460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/8753175197542264460'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/augmented-reality.html' title='Augmented reality'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-6396000912474247090</id><published>2011-07-29T08:29:00.000-07:00</published><updated>2011-07-29T08:31:06.319-07:00</updated><title type='text'>How to make your own haar trained ".xml" files</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;hiii friends&lt;br /&gt;Today i write on how to make ur own xml file. It took me long to figure it out.&lt;br /&gt;The basic requirement is for u to have OpenCV installed and integrated to ur IDE.&lt;br /&gt;If u haven't, then u could do it by following this link:&lt;br /&gt;&lt;a href="http://nayakamitarup.blogspot.com/2011/05/introduction-to-opencv-for-image.html"&gt;http://nayakamitarup.blogspot.com/2011/05/introduction-to-opencv-for-image.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that u have installed OpenCV, u r ready to go.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;To start, dowload the "tools.exe" from the link below:&lt;br /&gt;&lt;a href="http://www.4shared.com/file/mpbQkWp4/tools.html"&gt;http://www.4shared.com/file/mpbQkWp4/tools.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Unzip the tools.exe into a folder. U will find the contents like given below:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-lbMn2VsWUAs/TjK82Odb1_I/AAAAAAAAAIg/DCOiUQgRchE/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="70" src="http://3.bp.blogspot.com/-lbMn2VsWUAs/TjK82Odb1_I/AAAAAAAAAIg/DCOiUQgRchE/s400/1.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;For training, u would need a database of thousands of images, &lt;b&gt;with&lt;/b&gt; and &lt;b&gt;without the object&lt;/b&gt; u want to train the xml file for, respectively called as &lt;b&gt;positive&lt;/b&gt; and &lt;b&gt;negative&lt;/b&gt; images. Near about 1000-2000 positives and 3000 negetives, sound fine for training.&lt;br /&gt;&lt;br /&gt;Now u need to place all the positive images(images with object) inside the folder&amp;nbsp; &lt;b&gt;"\temp\positive\rawdata&lt;/b&gt;".&lt;br /&gt;Now that u have placed all the positives, execute the "&lt;b&gt;objectmarker.exe&lt;/b&gt;". On executing it, it will show the image, and u need to mark the area containing the object. and u get some thing like this:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-S99-4IH9-WI/TjK_PvMxR5I/AAAAAAAAAIk/DWjlcDwNdhA/s1600/2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-S99-4IH9-WI/TjK_PvMxR5I/AAAAAAAAAIk/DWjlcDwNdhA/s1600/2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;Then press "Space Bar". It will feed the coordinates of the bounding rectangle into a text file "info.txt".&lt;br /&gt;Then Press "Enter" to go to next image, and continue similarly till u are done with all the images.&lt;br /&gt;&amp;nbsp;This is the most tiring part, and makes u wanna kill urself :P .&lt;br /&gt;&lt;br /&gt;WARNING: Donot kill urself, have patience. :)&lt;br /&gt;&lt;br /&gt;Now u can see the "info .txt" looks somthing like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--quXAYouxNo/TjLCgFLBC0I/AAAAAAAAAIo/1ydFqMu8pA0/s1600/3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="123" src="http://2.bp.blogspot.com/--quXAYouxNo/TjLCgFLBC0I/AAAAAAAAAIo/1ydFqMu8pA0/s320/3.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Phew!!!!&lt;br /&gt;Done with the most tiring part. Now insert all the negetive images(images without the object) or the so called background images into the folder &lt;b&gt;"temp\negative"&lt;/b&gt;, and execute the "create_list.bat" file.&lt;br /&gt;On executing it, it stores the names of negative images along with extension, into a text file "infofile.txt" and it looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UyVktycxW2I/TjLEAbyeVVI/AAAAAAAAAIs/rYvcLMla1MM/s1600/4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="120" src="http://4.bp.blogspot.com/-UyVktycxW2I/TjLEAbyeVVI/AAAAAAAAAIs/rYvcLMla1MM/s320/4.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now u need to create samples for haar training. It is done by typing the following command in "&lt;b&gt;start-&amp;gt;run&lt;/b&gt;"&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C:\Users\amit\Desktop\hand\lasssssssssssssst\temp\createsamples.exe -info positive/info.txt -vec data/vector.vec -num 527 -w 24 -h 24&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XhhjhfULxO8/TjLFty8KveI/AAAAAAAAAIw/K8TBTSh-ElQ/s1600/5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" src="http://3.bp.blogspot.com/-XhhjhfULxO8/TjLFty8KveI/AAAAAAAAAIw/K8TBTSh-ElQ/s320/5.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Here, to use this command u need to edit it , with the number of positive and negetive images. Since I had used 527 positive images and 1142 negetive images and 30 stages, u can change it according to use by simply replacing the numbers in the command.&lt;br /&gt;&lt;br /&gt;Now that the samples have been created, u can start haar training.&lt;br /&gt;The same procedure is to be followed. Type the command in "&lt;b&gt;start-&amp;gt;run&lt;/b&gt;".&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C:\Users\amit\Desktop\hand\lasssssssssssssst\temp\haartraining.exe -data data/cascade -vec data/vector.vec -bg negative/infofile.txt -npos 527 -nneg 1142 -nstages 30 -mem 1000 -mode ALL -w 24 -h 24 -nonsym&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This starts the haar training, and u can see on the window, something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-CLilnrERPMU/TjLMdmPysrI/AAAAAAAAAI0/KioKNPQeZPU/s1600/har.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://1.bp.blogspot.com/-CLilnrERPMU/TjLMdmPysrI/AAAAAAAAAI0/KioKNPQeZPU/s400/har.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;This will continue upto the stage u have mentioned. It takes hell lot of a time, and during this time it occupies nearly 60% of the processor.&lt;br /&gt;As the training proceeds,u will find folders forming with the text file "&lt;b&gt;AdaBoostCARTHaarClassifier.txt&lt;/b&gt;" forming and a &lt;b&gt;"vector.vec"&lt;/b&gt; file is also formed.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-B0IyWTe4f38/TjLNtiiZLqI/AAAAAAAAAI4/fqt6PkQDwTQ/s1600/6.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://4.bp.blogspot.com/-B0IyWTe4f38/TjLNtiiZLqI/AAAAAAAAAI4/fqt6PkQDwTQ/s320/6.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;On completion of training, replace the &lt;b&gt;"data"&lt;/b&gt; in&lt;b&gt; "haar\cascade2xml"&lt;/b&gt; by the &lt;b&gt;"data"&lt;/b&gt; folder in&lt;b&gt; "haar\temp"&lt;/b&gt;, and copy the &lt;b&gt;"vector.vec"&lt;/b&gt; to location &lt;b&gt;"haar\cascade2xml"&lt;/b&gt;.&lt;br /&gt;Now execute the &lt;b&gt;"convert.bat"&lt;/b&gt; file. It finally forms the &lt;b&gt;output.xml&lt;/b&gt; file.&lt;br /&gt;&lt;br /&gt;Congrats, u made ur own xml file :)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-6396000912474247090?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/6396000912474247090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/how-to-make-your-own-haar-trained-xml.html#comment-form' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6396000912474247090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6396000912474247090'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/how-to-make-your-own-haar-trained-xml.html' title='How to make your own haar trained &quot;.xml&quot; files'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-lbMn2VsWUAs/TjK82Odb1_I/AAAAAAAAAIg/DCOiUQgRchE/s72-c/1.JPG' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-8511381631938184123</id><published>2011-07-08T08:59:00.000-07:00</published><updated>2011-07-14T09:25:41.182-07:00</updated><title type='text'>My summer project :)</title><content type='html'>Hii&lt;br /&gt;Today I and Gigyanshu feel greatly relieved having completed a part of our summer intern project. Our project deals with Image processing using OpenCv to detect shape and color of objects and Programming the " SPARKV " robot to find them.&lt;br /&gt;&lt;br /&gt;We have used my faithful ACER 5920 laptop (2.00 GB RAM and 2.20 GHz with Intel Core 2 Duo), a 16 MP webcam, 2 Xbee wireless modules.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-0y8q9-hRxNs/Thcn71AySjI/AAAAAAAAAHk/56ZFDWPlxsk/s1600/spark.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-0y8q9-hRxNs/Thcn71AySjI/AAAAAAAAAHk/56ZFDWPlxsk/s1600/spark.PNG" /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;u&gt;&lt;b&gt;SparkV Bot&lt;/b&gt;&lt;/u&gt; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;This is the video of result until now. Still need to improve it, so we would be posting more videos with better results :)&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-3845cc4037474f77" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v17.nonxt4.googlevideo.com/videoplayback?id%3D3845cc4037474f77%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D212A9CE1C9369C3B034E8AEE15C139DC798506D3.81528A23D89947BDA547F6213B4F5692F7C3CEE6%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3845cc4037474f77%26offsetms%3D5000%26itag%3Dw160%26sigh%3Ds2OpF08ByVkl9ngSQX2Ru8PodD8&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v17.nonxt4.googlevideo.com/videoplayback?id%3D3845cc4037474f77%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D212A9CE1C9369C3B034E8AEE15C139DC798506D3.81528A23D89947BDA547F6213B4F5692F7C3CEE6%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D3845cc4037474f77%26offsetms%3D5000%26itag%3Dw160%26sigh%3Ds2OpF08ByVkl9ngSQX2Ru8PodD8&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-8511381631938184123?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/8511381631938184123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/my-summer-project.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/8511381631938184123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/8511381631938184123'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/07/my-summer-project.html' title='My summer project :)'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-0y8q9-hRxNs/Thcn71AySjI/AAAAAAAAAHk/56ZFDWPlxsk/s72-c/spark.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-6088115647116634315</id><published>2011-06-29T12:56:00.000-07:00</published><updated>2011-06-29T12:56:45.626-07:00</updated><title type='text'>2D AR using "SURF" based application of OpenCV</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-dd4bf291c989d44d" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v2.nonxt2.googlevideo.com/videoplayback?id%3Ddd4bf291c989d44d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3D697F299E417A89C92EECFE4B95C3297691E19.558B9C10D212D7912E37E30D11C9AEE90303E3D0%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Ddd4bf291c989d44d%26offsetms%3D5000%26itag%3Dw160%26sigh%3DedS7kIA8rE4Pj_cQbWrT08S8HgU&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v2.nonxt2.googlevideo.com/videoplayback?id%3Ddd4bf291c989d44d%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D3D697F299E417A89C92EECFE4B95C3297691E19.558B9C10D212D7912E37E30D11C9AEE90303E3D0%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Ddd4bf291c989d44d%26offsetms%3D5000%26itag%3Dw160%26sigh%3DedS7kIA8rE4Pj_cQbWrT08S8HgU&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is 2D AR using "SURF" based application of OpenCV. &lt;strong&gt;SURF (Speeded Up Robust Features)&lt;/strong&gt; is a robust image detector &amp;amp; descriptor.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-6088115647116634315?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/6088115647116634315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/2d-ar-using-surf-based-application-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6088115647116634315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/6088115647116634315'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/2d-ar-using-surf-based-application-of.html' title='2D AR using &quot;SURF&quot; based application of OpenCV'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-2973676502532133648</id><published>2011-06-16T00:08:00.000-07:00</published><updated>2012-01-01T00:46:59.185-08:00</updated><title type='text'>OpenCV: Alien Attack</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-986b7f466725616b" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt6.googlevideo.com/videoplayback?id%3D986b7f466725616b%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7F2675098E20A62BF6B9EE3458F9C1B115560305.6B55D500B1246DF8810B2CB17EDBBD8321353F23%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D986b7f466725616b%26offsetms%3D5000%26itag%3Dw160%26sigh%3DeNziy34eOdxz3pFNb6lEflrJ5Cw&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt6.googlevideo.com/videoplayback?id%3D986b7f466725616b%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7F2675098E20A62BF6B9EE3458F9C1B115560305.6B55D500B1246DF8810B2CB17EDBBD8321353F23%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D986b7f466725616b%26offsetms%3D5000%26itag%3Dw160%26sigh%3DeNziy34eOdxz3pFNb6lEflrJ5Cw&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Aliens have attacked and u r the sole survivor. So, to survive, u need to slap them to death. :)&lt;br /&gt;I have been playing it for an hour nearly and am loving it. :) &lt;br /&gt;&lt;br /&gt;It has been made using OpenCV and C++. It is an addition to the interface in the previous post. Hope u like it.&lt;br /&gt;&lt;br /&gt;To enjoy it U have to download the file &lt;b&gt;games.rar &lt;/b&gt;from the link below&lt;br /&gt;&lt;a href="http://www.4shared.com/get/9H5lh6vs/game.html"&gt;http://www.4shared.com/get/9H5lh6vs/game.html&lt;/a&gt; &lt;br /&gt;Unzip it in ur E drive (important) directly. Run the game.exe to execute. Njoy :)&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-2973676502532133648?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/2973676502532133648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/opencv-alien-attack.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/2973676502532133648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/2973676502532133648'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/opencv-alien-attack.html' title='OpenCV: Alien Attack'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-4048870925725667020</id><published>2011-06-09T09:10:00.000-07:00</published><updated>2011-06-14T18:38:08.456-07:00</updated><title type='text'>Application using OpenCV to play music, draw, play video using hand gestures</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-93386be553986ea3" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v2.nonxt1.googlevideo.com/videoplayback?id%3D93386be553986ea3%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D740EBDD9D4B677B67ED9DC84C9363A064F9C7BC.2D6DAE4F6EE5C2E13205100EB89BB92EDB9F2265%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D93386be553986ea3%26offsetms%3D5000%26itag%3Dw160%26sigh%3DbFOdseFMTTRHogcjWql_w8YKGDE&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v2.nonxt1.googlevideo.com/videoplayback?id%3D93386be553986ea3%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D740EBDD9D4B677B67ED9DC84C9363A064F9C7BC.2D6DAE4F6EE5C2E13205100EB89BB92EDB9F2265%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D93386be553986ea3%26offsetms%3D5000%26itag%3Dw160%26sigh%3DbFOdseFMTTRHogcjWql_w8YKGDE&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;Hii friends, this is something me n my friend Prakash came up with in order to kill the boredum of our summer holidays :) .&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;This is made in OpenCV using Code::Blocks IDE. We have used gesture recognition as the prime component.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;This is incomplete and we will be adding more features like games, giving urself wierd hairstyles using face detection, doing matematics using gestures&amp;nbsp;and much more features.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-4048870925725667020?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/4048870925725667020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/hand-is-all-u-need.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4048870925725667020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4048870925725667020'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/hand-is-all-u-need.html' title='Application using OpenCV to play music, draw, play video using hand gestures'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-1027755550526345350</id><published>2011-06-02T08:56:00.000-07:00</published><updated>2011-06-02T08:56:09.753-07:00</updated><title type='text'>Gesture recognition using Haar clasifier</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Hiii, friends since some days, I have been working on Gesture recognition using&amp;nbsp; &lt;strong&gt;using Haar&lt;/strong&gt;-like features. I havent been able to get very good results, owing to the lack of hand database. More over, the Classifier is taking hell lot of a time to get trained.&lt;br /&gt;&lt;br /&gt;This is the result I got by using haar clasifier to train it for 2 gestures, my fist xml file being of nearly 70 kb, and xml file for L palm&amp;nbsp; being nearly 30 kb. They are indeed small, and so the result i get , u can see from the video.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-f39279410ae9d108" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v3.nonxt6.googlevideo.com/videoplayback?id%3Df39279410ae9d108%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D490F988A51C7AA581A3201BE812BA063022A9C2E.500A82F9003E5AC37869881549B4F4750B5E064F%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df39279410ae9d108%26offsetms%3D5000%26itag%3Dw160%26sigh%3DXF12NFbnBTKovWxlpI9wVl8O-xo&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v3.nonxt6.googlevideo.com/videoplayback?id%3Df39279410ae9d108%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D490F988A51C7AA581A3201BE812BA063022A9C2E.500A82F9003E5AC37869881549B4F4750B5E064F%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Df39279410ae9d108%26offsetms%3D5000%26itag%3Dw160%26sigh%3DXF12NFbnBTKovWxlpI9wVl8O-xo&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;For better results, I need to train my classifier with more positive images, nearly 3000, and negetive images nearly about 5000.&amp;nbsp;Now, I am making my own collection of hand gestures :) &lt;br /&gt;.&lt;br /&gt;I heard of a Massey's Gesture database, but the link doesnt seem to be working. ( sighs )&lt;br /&gt;&lt;br /&gt;But still u can use this database &lt;br /&gt;&lt;a href="http://www.iis.ee.ic.ac.uk/~tkkim/ges_db.htm"&gt;http://www.iis.ee.ic.ac.uk/~tkkim/ges_db.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have started my training my new .xml files for closed fist or 'A' using 527 positive and 1142 negetive images, and it is taking like forever.( sighs ). I guess it may get fully trained within about&amp;nbsp;three days. Then I will be posting my new results :)&lt;br /&gt;&lt;br /&gt;&amp;nbsp;Using the results I get above, I tried simulating mouse movements, and clicking, I used my closed fist gesture to move the mouse, and the L palm for clicking. It wasnt that stable, but still, it works :) (cheers). Its fun..&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-1027755550526345350?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/1027755550526345350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/gesture-recognition-using-haar.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/1027755550526345350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/1027755550526345350'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/06/gesture-recognition-using-haar.html' title='Gesture recognition using Haar clasifier'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-4816789734711623408</id><published>2011-05-27T10:18:00.000-07:00</published><updated>2011-07-15T07:55:24.864-07:00</updated><title type='text'>Swarm Robotics@ IIT Bombay Techfest 2010.</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Me and my friends took part in a very interesting robotics event&amp;nbsp; ANTZ, based on swarm intelligence, conducted by IIT Bombay during Techfest 2010. It had Indian participants as well as International participants from Thailand, Sri Lanka and Australia.The initial rounds were conducted nationally to select 3 top&amp;nbsp;teams each from&amp;nbsp;India, Austalia, Sri Lanka and Thailand. Then finally the 12 teams contested&amp;nbsp;at the finals.&lt;br /&gt;&lt;br /&gt;Our team was the winner(1st) of ANTZ WORLD FINALE. :)&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-J-62ak1k-Bo/Td9lSp-TVmI/AAAAAAAAAB0/3Wo3EbItZR8/s1600/team.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" src="http://1.bp.blogspot.com/-J-62ak1k-Bo/Td9lSp-TVmI/AAAAAAAAAB0/3Wo3EbItZR8/s320/team.JPG" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Our team.From left-Vikas, Deepankar Singh, Rahul Sinha and me.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mondaymorning.nitrkl.ac.in/index.php/campus/campus-buzz/6-nit-rourkela-team-wins-international-robotics"&gt;http://mondaymorning.nitrkl.ac.in/index.php/campus/campus-buzz/6-nit-rourkela-team-wins-international-robotics&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Swarm robotics basically includes a number of bots communicating with each other to coordinate an action.&lt;br /&gt;Our event required 2 bots to communicate with each other to pick up boxes placed randomly in the arena and place the blocks in the certain required area. There were also included regions that were 1 bot zone, i.e. only 1 bot could enter at a time and similarly many more rules need to kept in mind.&lt;br /&gt;&lt;br /&gt;Some snaps of the bots which took part in the event:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-WNy19welGhE/Td_TsMa4u5I/AAAAAAAAAB4/8TQTxkm-VM0/s1600/bot1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-WNy19welGhE/Td_TsMa4u5I/AAAAAAAAAB4/8TQTxkm-VM0/s320/bot1.JPG" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-phnnEeR3Xe0/Td_TwjUIU9I/AAAAAAAAAB8/o7XLuPUP8WY/s1600/bot2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://3.bp.blogspot.com/-phnnEeR3Xe0/Td_TwjUIU9I/AAAAAAAAAB8/o7XLuPUP8WY/s320/bot2.JPG" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-IKaQBnLVI14/Td_T2p1kWDI/AAAAAAAAACA/QF9MOlFKgSw/s1600/bot5.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="242" src="http://2.bp.blogspot.com/-IKaQBnLVI14/Td_T2p1kWDI/AAAAAAAAACA/QF9MOlFKgSw/s320/bot5.JPG" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-cH-yLjs3ZjQ/Td_T7ErIdVI/AAAAAAAAACE/I8VmzOXgjf8/s1600/bot4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="286" src="http://1.bp.blogspot.com/-cH-yLjs3ZjQ/Td_T7ErIdVI/AAAAAAAAACE/I8VmzOXgjf8/s320/bot4.JPG" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;The video of our bot during the initial practice round. Our bot running&amp;nbsp;on 100 rpm﻿ motors, in slow poke mode. lol!!&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-b441cb4e24c68e07" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v7.nonxt6.googlevideo.com/videoplayback?id%3Db441cb4e24c68e07%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FF89C807CE249B1BFF4495034F110B150E8574F.61405B412FACBEDA15716AF848FA07AFF873DB4E%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db441cb4e24c68e07%26offsetms%3D5000%26itag%3Dw160%26sigh%3D8Ntc8KB7mtQbJ8Xskr8mpcpT2YQ&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v7.nonxt6.googlevideo.com/videoplayback?id%3Db441cb4e24c68e07%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D6FF89C807CE249B1BFF4495034F110B150E8574F.61405B412FACBEDA15716AF848FA07AFF873DB4E%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3Db441cb4e24c68e07%26offsetms%3D5000%26itag%3Dw160%26sigh%3D8Ntc8KB7mtQbJ8Xskr8mpcpT2YQ&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;The only problem with this was speed. Our algorithm was perfect and we never got any fault, but the problem was speed. So, we doubled its speed by using 200 rpm motors and changed calibration, and now it was just rock n rolla!! :)&lt;br /&gt;Sadly our camera was lost on the last day ( sighs ), so can't upload our final run video.&amp;nbsp; :(&lt;br /&gt;&lt;br /&gt;Still njoy the videos of&amp;nbsp; other bots:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-9f89f9ca2dd7c9c5" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v1.nonxt2.googlevideo.com/videoplayback?id%3D9f89f9ca2dd7c9c5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4518D20A9FECA6BB988561BD7DE223472E732E8F.7A54D6E6B5319A4B1A3328F9A2A23EC6A652AEE6%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D9f89f9ca2dd7c9c5%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dp7n_Rx1AGuqyZDjm9eKUz2bIUlo&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v1.nonxt2.googlevideo.com/videoplayback?id%3D9f89f9ca2dd7c9c5%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D4518D20A9FECA6BB988561BD7DE223472E732E8F.7A54D6E6B5319A4B1A3328F9A2A23EC6A652AEE6%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D9f89f9ca2dd7c9c5%26offsetms%3D5000%26itag%3Dw160%26sigh%3Dp7n_Rx1AGuqyZDjm9eKUz2bIUlo&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-1cb5dadeae760d77" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D1cb5dadeae760d77%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D399F32995537CF13BB045146AFC63C56AC6C3C74.1C27494C7B0B874EE980869B2090A9A833C4CE1%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D1cb5dadeae760d77%26offsetms%3D5000%26itag%3Dw160%26sigh%3DHhrAwR-gmV6PXKcno0bhxvzN6qA&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D1cb5dadeae760d77%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D399F32995537CF13BB045146AFC63C56AC6C3C74.1C27494C7B0B874EE980869B2090A9A833C4CE1%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D1cb5dadeae760d77%26offsetms%3D5000%26itag%3Dw160%26sigh%3DHhrAwR-gmV6PXKcno0bhxvzN6qA&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;Now lets talk about swarm robotics. The main component of concern here is the communication between bots. For this purpose, these days a lot of modules are available, but the modules which are mainly used for hobby robotics are:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1) CC2500 2.4Ghz&amp;nbsp;RF transceiver&amp;nbsp;module&lt;/b&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-oG5iqLZiL4Q/Td_azPGxiEI/AAAAAAAAACI/hYydUbGu1L4/s1600/img_5680-250x250.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-oG5iqLZiL4Q/Td_azPGxiEI/AAAAAAAAACI/hYydUbGu1L4/s1600/img_5680-250x250.jpg" t8="true" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;﻿&lt;/div&gt;&lt;b&gt;2) Zigbee module&lt;/b&gt; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-GhAnk7kFs9A/Td_bWpaf0uI/AAAAAAAAACM/q8e1-FefThY/s1600/xbee_zigbee.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-GhAnk7kFs9A/Td_bWpaf0uI/AAAAAAAAACM/q8e1-FefThY/s1600/xbee_zigbee.jpg" t8="true" /&gt;&lt;/a&gt;&lt;/div&gt;Using the above modules we communicate regaurding the position and status of bot, and thus plan our actions accordingly.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-4816789734711623408?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/4816789734711623408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/swarm-robotics-iit-bombay-techfest-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4816789734711623408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4816789734711623408'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/swarm-robotics-iit-bombay-techfest-2010.html' title='Swarm Robotics@ IIT Bombay Techfest 2010.'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-J-62ak1k-Bo/Td9lSp-TVmI/AAAAAAAAAB0/3Wo3EbItZR8/s72-c/team.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-4380590497465567253</id><published>2011-05-26T11:07:00.000-07:00</published><updated>2011-05-26T11:07:51.946-07:00</updated><title type='text'>P.O.V. (Persistence Of Vision)</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-e3912d1479952ed7" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v1.nonxt1.googlevideo.com/videoplayback?id%3De3912d1479952ed7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7E1A551A0867CA633D6714C6841F216874C812EF.450BEB3CF54F641AE58EFAE3C090CF9E15785090%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De3912d1479952ed7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DBxiaNMCr_tlvJq-IKOrrnpiyDMs&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v1.nonxt1.googlevideo.com/videoplayback?id%3De3912d1479952ed7%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D7E1A551A0867CA633D6714C6841F216874C812EF.450BEB3CF54F641AE58EFAE3C090CF9E15785090%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De3912d1479952ed7%26offsetms%3D5000%26itag%3Dw160%26sigh%3DBxiaNMCr_tlvJq-IKOrrnpiyDMs&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;This is the video of POV made by me n my friends Deepankar Singh, Rahul Sinha.&lt;br /&gt;If this video doesnt work, then see the link below&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=J00ZKz__UKc"&gt;http://www.youtube.com/watch?v=J00ZKz__UKc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To make it we used the components:&lt;br /&gt;1)Microcontroller - AtMega32&lt;br /&gt;2)Leds - 7.(u can use any number according to display u desire)&lt;br /&gt;3)&amp;nbsp;LM 7805 - 5v supply&lt;br /&gt;4)TSOP - for sensing IR&amp;nbsp;blinking at 38khz, to be used as external interrupt&lt;br /&gt;5)Capacitors-100 microfarad&lt;br /&gt;&lt;br /&gt;The circuit&amp;nbsp;diagram is:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-mIFIOwd3GxQ/Td6P6oyVGUI/AAAAAAAAABo/LUZdWXI36as/s1600/dsc00165_001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/-mIFIOwd3GxQ/Td6P6oyVGUI/AAAAAAAAABo/LUZdWXI36as/s320/dsc00165_001.jpg" t8="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The whole circuit is&amp;nbsp;stuck to a&amp;nbsp;fan. Then we give an external IR source blinking at 38khz at constant point, so that when the circuit rotates, it meets the ir light at a constant point always.This triggers&amp;nbsp;low output in the TSOP. The TSOP is generally high in absence of 38khz IR, but goes low in the presence of IR.&lt;br /&gt;This can be used to detect when it has completed an entire circle of revolution. For this purpose, we can use interrupts or simple poling i.e. checking the pin continiously.&lt;br /&gt;Then the time taken by it is stored and used for displaying letters. We divide the time into total no. of sectors in which we want to display. &lt;br /&gt;&lt;br /&gt;We have used 7x5 column to display letters, i.e. we have used 5 sectors of led positions, manipulating their on and off state, to display. We can use the BITMAP CALCULATOR which lets you draw a character and&lt;br /&gt;visualise it. It can be&amp;nbsp;seen in&lt;br /&gt;&lt;a href="http://www.geocities.com/dinceraydin/lcd/charcalc.htm"&gt;http://www.geocities.com/dinceraydin/lcd/charcalc.htm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now, when the circuit starts rotating at a nearly constant speed, the first ir signal received&amp;nbsp;indicates the start of rotation, the next signals received indicate the end of rotation and hence the rotation time value is stored and then the display starts. For display, lets suppose we want to display C, then, it must be like below&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-DMHZWbxsWP8/Td6VaPpgerI/AAAAAAAAABs/-Kp1eqLb6sI/s1600/bit.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-DMHZWbxsWP8/Td6VaPpgerI/AAAAAAAAABs/-Kp1eqLb6sI/s320/bit.JPG" t8="true" width="140" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Seeing this we can say that the sequence of glowing of leds must be&lt;br /&gt;11111111&lt;br /&gt;then&lt;br /&gt;10000001&lt;br /&gt;then&lt;br /&gt;10000001&lt;br /&gt;then&lt;br /&gt;10000001&lt;br /&gt;then&lt;br /&gt;10000001&lt;br /&gt;and last&lt;br /&gt;11100111&lt;br /&gt;&lt;br /&gt;This completes the display of "C". The wideness of display depends on the time alloted for the display of each line. Similarly we can diplay other characters also.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-4380590497465567253?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/4380590497465567253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/pov-persistence-of-vision.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4380590497465567253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4380590497465567253'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/pov-persistence-of-vision.html' title='P.O.V. (Persistence Of Vision)'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-mIFIOwd3GxQ/Td6P6oyVGUI/AAAAAAAAABo/LUZdWXI36as/s72-c/dsc00165_001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-4563811151084625890</id><published>2011-05-14T07:06:00.000-07:00</published><updated>2011-05-14T07:06:55.931-07:00</updated><title type='text'>Handling mouse events</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;We can monitor the mouse movements to trigger different events, lets start with setting a&lt;strong&gt; ROI(&amp;nbsp;Region Of Interest )&lt;/strong&gt; using the clicking of left mouse button.&lt;br /&gt;&lt;br /&gt;The code is :&lt;br /&gt;&lt;br /&gt;#include "cv.h"&lt;br /&gt;#include "highgui.h"&lt;br /&gt;CvPoint point;&lt;br /&gt;int drag = 0;&lt;br /&gt;void mouse_callback(int event, int x, int y, int flags, void* img)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (event == CV_EVENT_LBUTTONDOWN)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; point = cvPoint(x, y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; drag = 1;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else if (event == CV_EVENT_MOUSEMOVE &amp;amp;&amp;amp; drag)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage* img1 = cvCloneImage((IplImage*) img);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvRectangle(img1, point, cvPoint(x, y), CV_RGB(255, 0, 0), 1, 8, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("img", img1);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else if (event == CV_EVENT_LBUTTONUP)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; drag = 0;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;IplImage* img = cvLoadImage("C:/Users/amit/Desktop/myblog/ball detection/pan.jpg");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;cvNamedWindow("img", 1);&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp;cvSetMouseCallback("img", mouse_callback, img);&lt;br /&gt;&amp;nbsp; cvShowImage("img", img);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; cvWaitKey(0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; cvDestroyAllWindows();&lt;br /&gt;&amp;nbsp; cvReleaseImage(&amp;amp;img);&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Explanation&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;What happens in this code is that when we click the left mouse, then the event is set to CV_EVENT_LBUTTONDOWN, which implies the pressing of left mouse button and the drag is set. Now on dragging the mouse with left button pressed, the rectangle is formed with corners, one end with where it was first clicked and where it is now. &lt;br /&gt;When we release the left button, then the event is set to CV_EVENT_LBUTTONUP, and thus we get the ROI as required.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;Application:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. &amp;nbsp;It has a very good application. We can use it to track an object of a color let it be a ball like we described in previous tutorial. What we do is we select the ROI and thus find the ranges of HUE, SATURATION and VALUE for the ball color, and then using shape detection like before, we can detect ball.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The code is :&lt;br /&gt;&lt;br /&gt;#include "cv.h"&lt;br /&gt;#include "highgui.h"&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;CvPoint point;&lt;br /&gt;int drag = 0;&lt;br /&gt;int hmin=180,hmax=0,smin=256,smax=0,vmin=256,vmax=0,cnt=0,xs,ys,xe,ye;&lt;br /&gt;IplImage* frame = NULL;&lt;br /&gt;void mouse_callback(int event, int x, int y, int flags, void* img)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if (event == CV_EVENT_LBUTTONDOWN)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; point = cvPoint(x, y);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; drag = 1;cnt=10;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(cnt==10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {xs=x;ys=y;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else if (event == CV_EVENT_MOUSEMOVE &amp;amp;&amp;amp; drag)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage* img1 = cvCloneImage((IplImage*) img);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //cvRectangle(img1, point, cvPoint(x, y), CV_RGB(255, 0, 0), 1, 8, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //cvShowImage("img", img1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvRectangle(frame, point, cvPoint(x, y), CV_RGB(255, 0, 0), 1, 8, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("video", frame);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(cnt==10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {xe=x;ye=y;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; else if (event == CV_EVENT_LBUTTONUP)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; drag = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(cnt==10)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {cnt=cnt+1;}&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;main()&lt;br /&gt;{&lt;br /&gt;int i,j,xa,ya;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvCapture* capture = cvCaptureFromCAM( 0 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !capture )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: capture is NULL \n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("video", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("colordetect", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&lt;br /&gt;frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSize size = cvGetSize(frame);&lt;br /&gt;&amp;nbsp;IplImage *&amp;nbsp; stor&amp;nbsp;&amp;nbsp;&amp;nbsp; = cvCreateImage(size, IPL_DEPTH_8U, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage *&amp;nbsp; hsv_frame&amp;nbsp;&amp;nbsp;&amp;nbsp; = cvCreateImage(size, IPL_DEPTH_8U, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage*&amp;nbsp; thresholded&amp;nbsp;&amp;nbsp; = cvCreateImage(size, IPL_DEPTH_8U, 1);&lt;br /&gt;//&amp;nbsp; IplImage* img = cvLoadImage("C:/Users/amit/Desktop/myblog/ball detection/pan.jpg");&lt;br /&gt;&amp;nbsp; //cvNamedWindow("img", 1);&lt;br /&gt;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //capture image from cam&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // stor=cvCloneImage(frame);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !frame )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: frame is null...\n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;cvSetMouseCallback("video", mouse_callback, frame);&lt;br /&gt;cvShowImage("video", frame);&lt;br /&gt;&amp;nbsp;//cvShowImage("colordetect", thresholded);&lt;br /&gt;if(cnt==11)&lt;br /&gt;{cnt=0;&lt;br /&gt;&amp;nbsp; cvDestroyAllWindows();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; cvNamedWindow("video", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("colordetect", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCvtColor(frame, hsv_frame, CV_BGR2HSV);&lt;br /&gt;&lt;br /&gt;for(xa=xs+1;xa&amp;lt;xe;xa++)&lt;br /&gt;{&lt;br /&gt;for(ya=ys+1;ya&amp;lt;ye;ya++)&lt;br /&gt;{&lt;br /&gt;CvScalar s=cvGet2D(hsv_frame,xa,ya);&lt;br /&gt;if(hmin &amp;gt; s.val[0])&lt;br /&gt;{hmin = s.val[0];}&lt;br /&gt;if(hmax &amp;lt; s.val[0])&lt;br /&gt;{hmax = s.val[0];}&lt;br /&gt;&lt;br /&gt;if(smin &amp;gt; s.val[1])&lt;br /&gt;{smin = s.val[1];}&lt;br /&gt;&lt;br /&gt;if(smax &amp;lt; s.val[1])&lt;br /&gt;{smax = s.val[1];}&lt;br /&gt;if(vmin &amp;gt; s.val[2])&lt;br /&gt;{vmin = s.val[2];}&lt;br /&gt;&lt;br /&gt;if(vmax &amp;lt; s.val[2])&lt;br /&gt;{vmax = s.val[2];}&lt;br /&gt;cout&amp;lt;&amp;lt;s.val[0]&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;cout&amp;lt;&amp;lt;"thresholded"&amp;lt;&amp;lt;endl;&lt;br /&gt;cout&amp;lt;&amp;lt;hmax&amp;lt;&amp;lt;"&amp;nbsp; "&amp;lt;&amp;lt;hmin&amp;lt;&amp;lt;endl;&lt;br /&gt;cout&amp;lt;&amp;lt;smax&amp;lt;&amp;lt;"&amp;nbsp; "&amp;lt;&amp;lt;smin&amp;lt;&amp;lt;endl;&lt;br /&gt;cout&amp;lt;&amp;lt;vmax&amp;lt;&amp;lt;"&amp;nbsp; "&amp;lt;&amp;lt;vmin&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;CvScalar hsv_min = cvScalar(hmin, smin, vmin, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvScalar hsv_max =&amp;nbsp; cvScalar(hmax, smax, vmax, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !frame )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: frame is null...\n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCvtColor(frame, hsv_frame, CV_BGR2HSV);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //color detection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvInRangeS(hsv_frame, hsv_min, hsv_max, thresholded);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Memory for hough circles&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // CvMemStorage* storage = cvCreateMemStorage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvSmooth( thresholded, thresholded, CV_GAUSSIAN, 11, 11 );&lt;br /&gt;CvMemStorage* storage = cvCreateMemStorage(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //shape detection-circle shape&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSeq* circles = cvHoughCircles(thresholded, storage, CV_HOUGH_GRADIENT, 2,thresholded-&amp;gt;height/6, 100, 50, 10, 400);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"no. of circles="&amp;lt;&amp;lt;circles-&amp;gt;total;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //drawing circle around the detected circle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; circles-&amp;gt;total; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float* p = (float*)cvGetSeqElem( circles, i );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"x= "&amp;lt;&amp;lt;p[0]&amp;lt;&amp;lt;"y= "&amp;lt;&amp;lt;p[1]&amp;lt;&amp;lt;"r= "&amp;lt;&amp;lt;p[2]&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCircle( frame, cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;cvShowImage("video", frame);&lt;br /&gt;&amp;nbsp;cvShowImage("colordetect", thresholded);&lt;br /&gt;&amp;nbsp; cvReleaseMemStorage(&amp;amp;storage);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (cvWaitKey(10) &amp;amp; 255) == 27 ) { //hmin=180,hmax=0,smin=256,smax=0,vmin=256,vmax=0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if( (cvWaitKey(10) &amp;amp; 255) == 27 ) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;cvReleaseCapture( &amp;amp;capture );&lt;br /&gt;&amp;nbsp; cvDestroyAllWindows();&lt;br /&gt;&amp;nbsp; //cvReleaseImage(&amp;amp;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ySQbtonPpms/Tc6LIqMYP6I/AAAAAAAAABg/dn2vJcTvW2k/s1600/balloooo.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="238" j8="true" src="http://3.bp.blogspot.com/-ySQbtonPpms/Tc6LIqMYP6I/AAAAAAAAABg/dn2vJcTvW2k/s320/balloooo.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2.&amp;nbsp; U can make ur Pong game in OpenCV. U can check out this video in youtube:&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=abusTzgsYYM"&gt;&lt;strong&gt;http://www.youtube.com/watch?v=abusTzgsYYM&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-4563811151084625890?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/4563811151084625890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/handling-mouse-events.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4563811151084625890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/4563811151084625890'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/handling-mouse-events.html' title='Handling mouse events'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-ySQbtonPpms/Tc6LIqMYP6I/AAAAAAAAABg/dn2vJcTvW2k/s72-c/balloooo.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-3055803669825430017</id><published>2011-05-14T05:47:00.000-07:00</published><updated>2011-05-14T06:06:01.017-07:00</updated><title type='text'>Detection of shapes like quads,rectangle,triangle and other complex shapes using OpenCV</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;To detect the shapes we would be utilising the property contour. It can be thought of more like the number of corners of a quadilateral in an image. Based on the number of contour and the angle correlation we can even detect complex shapes. &lt;br /&gt;&lt;br /&gt;The function of most importance here is &lt;strong&gt;cvFindContours().&lt;/strong&gt; Its format is:&lt;br /&gt;&lt;div class="code" style="display: none;" x-lang="ManagedCPlusPlus"&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre&gt;&lt;span class="identifier"&gt;cvFindContours&lt;/span&gt;(&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt; &lt;span class="parameter"&gt;image&lt;/span&gt;,&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt; &lt;span class="parameter"&gt;storage&lt;/span&gt;,&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt;% &lt;span class="parameter"&gt;firstContour&lt;/span&gt;,&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;int&lt;/a&gt; &lt;span class="parameter"&gt;headerSize&lt;/span&gt;,&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/95b2e17e-3891-d3e3-cbba-4a844b0cf874.htm"&gt;RETR_TYPE&lt;/a&gt; &lt;span class="parameter"&gt;mode&lt;/span&gt;,&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/e97f0943-009a-72ad-811b-ba44fc616e0c.htm"&gt;CHAIN_APPROX_METHOD&lt;/a&gt; &lt;span class="parameter"&gt;method&lt;/span&gt;,&lt;a href="http://msdn2.microsoft.com/en-us/library/bk9hwzbw" target="_blank"&gt;Point&lt;/a&gt; &lt;span class="parameter"&gt;offset&lt;/span&gt;)&lt;/pre&gt;&lt;pre&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;&lt;div id="parameters"&gt;&lt;div class="section"&gt;&lt;div class="sectionTitle"&gt;&lt;img src="http://www.emgu.com/wiki/files/1.5.0.0/Help/icons/collapse_all.gif" /&gt; Parameters&lt;/div&gt;&lt;div class="sectionContent"&gt;&lt;br /&gt;&lt;dl paramname="image"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;image&lt;/span&gt;&amp;nbsp;(&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;The source 8-bit single channel image. Non-zero pixels are treated as 1s, zero pixels remain 0s - that is image treated as binary. To get such a binary image from grayscale, one may use cvThreshold, cvAdaptiveThreshold or cvCanny. The function modifies the source image content&lt;/dd&gt;&lt;/dl&gt;&lt;/div&gt;&lt;dl paramname="storage"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;storage&lt;/span&gt;&amp;nbsp;(&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;Container of the retrieved contours&lt;/dd&gt;&lt;/dl&gt;&lt;dl paramname="firstContour"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;firstContour&lt;/span&gt;&amp;nbsp;( &lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;IntPtr&lt;/a&gt; &lt;span class="cpp"&gt;%&lt;/span&gt;) &lt;/dt&gt;&lt;dd&gt;Output parameter, will contain the pointer to the first outer contour&lt;/dd&gt;&lt;/dl&gt;&lt;dl paramname="headerSize"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;headerSize&lt;/span&gt;&amp;nbsp;(&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;Int32&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;Size of the sequence header, &amp;gt;=sizeof(CvChain) if method=CV_CHAIN_CODE, and &amp;gt;=sizeof(CvContour) otherwise&lt;/dd&gt;&lt;/dl&gt;&lt;dl paramname="mode"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;mode&lt;/span&gt;&amp;nbsp;(&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/95b2e17e-3891-d3e3-cbba-4a844b0cf874.htm"&gt;RETR_TYPE&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;Retrieval mode&lt;/dd&gt;&lt;/dl&gt;&lt;dl paramname="method"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;method&lt;/span&gt;&amp;nbsp;(&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/e97f0943-009a-72ad-811b-ba44fc616e0c.htm"&gt;CHAIN_APPROX_METHOD&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;Approximation method (for all the modes, except CV_RETR_RUNS, which uses built-in approximation). &lt;/dd&gt;&lt;/dl&gt;&lt;dl paramname="offset"&gt;&lt;dt&gt;&lt;span class="parameter"&gt;offset&lt;/span&gt;&amp;nbsp;(&lt;a href="http://msdn2.microsoft.com/en-us/library/bk9hwzbw" target="_blank"&gt;Point&lt;/a&gt;) &lt;/dt&gt;&lt;dd&gt;Offset, by which every contour point is shifted. This is useful if the contours are extracted from the image ROI and then they should be analyzed in the whole image context&lt;/dd&gt;&lt;/dl&gt;&lt;br /&gt;Now lets check it on an image. Let the input image&amp;nbsp;after thresholding be&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Y1M_d82WF28/Tc5yuVwt-8I/AAAAAAAAABY/3e-PXakd99s/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" j8="true" src="http://2.bp.blogspot.com/-Y1M_d82WF28/Tc5yuVwt-8I/AAAAAAAAABY/3e-PXakd99s/s320/1.png" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;&amp;nbsp;STEP1:&lt;/span&gt; &lt;u&gt;Convert image to gray scale image&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;cvCvtColor&lt;span style="color: green;"&gt;(&lt;/span&gt;img, grayimg, CV_BGR2GRAY&lt;span style="color: green;"&gt;)&lt;/span&gt;&lt;span style="color: teal;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;This converts the BGR image to Gray scale image and store as grayimg.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP2:&lt;/span&gt; &lt;u&gt;Find contours&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: #20124d;"&gt;&lt;span class="identifier"&gt;cvFindContours&lt;/span&gt;(&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;image&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;storage&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt;% &lt;span class="parameter"&gt;firstContour&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;headerSize&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/95b2e17e-3891-d3e3-cbba-4a844b0cf874.htm"&gt;&lt;span style="color: #20124d;"&gt;RETR_TYPE&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;mode&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/e97f0943-009a-72ad-811b-ba44fc616e0c.htm"&gt;&lt;span style="color: #20124d;"&gt;CHAIN_APPROX_METHOD&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;method&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bk9hwzbw" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;Point&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;offset&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;span class="parameter"&gt;It finds the contours, their coordinates&amp;nbsp;and stores it .Then on analyzing it and the angles,we can infer the shapes.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;span class="parameter"&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP3:&lt;/span&gt; &lt;u&gt;Toggle through the contours and find the number of points in a contour&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;span class="parameter"&gt;We then toggle through the contours to find the number of points in a contour is 4, it can be infered as quadilateral, and if the angles are nearly 90 degree then we can label it as rectangle. If the number of points in a contour is 3, then it is a triangle and so on we can detect other complex shapes also.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span class="parameter"&gt;&lt;span style="color: #20124d;"&gt;//detecting quad with 4 sides&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span class="parameter"&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;while(contours)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = cvApproxPoly(contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span class="parameter"&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(result-&amp;gt;total==4 &amp;amp;&amp;amp; fabs(cvContourArea(result, CV_WHOLE_SEQ)) &amp;gt; 20)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvPoint *pt[4];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span class="parameter"&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0;i&amp;lt;4;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt[i] = (CvPoint*)cvGetSeqElem(result, i);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span class="parameter"&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[0], *pt[1], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[1], *pt[2], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[2], *pt[3], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[3], *pt[0], cvScalar(255));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[0]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[0]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[0],pt[2],pt[1])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[1]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[1]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[1],pt[3],pt[2])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[2]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[2]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[2],pt[0],pt[3])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[3]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[3]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[3],pt[1],pt[0])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;n++;&lt;br /&gt;xt[n]=(int)((pt[0]-&amp;gt;x + pt[1]-&amp;gt;x + pt[2]-&amp;gt;x + pt[3]-&amp;gt;x)/4);&lt;br /&gt;yt[n]=(int)((pt[0]-&amp;gt;y + pt[1]-&amp;gt;y + pt[2]-&amp;gt;y + pt[3]-&amp;gt;y)/4);&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;contours = contours-&amp;gt;h_next;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP4:&lt;/span&gt; &lt;u&gt;Use text to write the shape of a quad at its centroid&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;In the previous tutorial u have been through text adding.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;Use it to add the text regaurding shape at the centre of figure.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: #20124d;"&gt;//initiate font and font size&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: #20124d;"&gt;cvInitFont(&amp;amp;font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;span style="color: teal;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: #20124d;"&gt;//write text in red color&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: #20124d;"&gt;cvPutText(contourDrawn, "Rectangle", cvPoint(x,y), &amp;amp;font, cvScalar(255, 0, 0, 0));&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;Now u r ready for the final prog. :)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;Do tell me if u make something new out of it.&amp;nbsp; ^_^&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-9ZEXHDmxTGM/Tc54Jqtxa9I/AAAAAAAAABc/CbDGvijIyBo/s1600/trirect.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" j8="true" src="http://4.bp.blogspot.com/-9ZEXHDmxTGM/Tc54Jqtxa9I/AAAAAAAAABc/CbDGvijIyBo/s320/trirect.JPG" width="249" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;strong&gt;//code to detect rectangle and rectangle.U can&lt;/strong&gt; &lt;strong&gt;modify it for other shapes&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;#ifdef _CH_&lt;br /&gt;#pragma package &amp;lt;opencv&amp;gt;&lt;br /&gt;#endif&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;#define CV_NO_BACKWARD_COMPATIBILITY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;#include "cv.h"&lt;br /&gt;#include "highgui.h"&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;CvFont font;&lt;br /&gt;&amp;nbsp;int xt[20],yt[20],n=-1,m=-1,xtr[20],ytr[20];&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;double angle( CvPoint* pt1, CvPoint* pt2, CvPoint* pt0 )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double dx1 = pt1-&amp;gt;x - pt0-&amp;gt;x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double dy1 = pt1-&amp;gt;y - pt0-&amp;gt;y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double dx2 = pt2-&amp;gt;x - pt0-&amp;gt;x;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; double dy2 = pt2-&amp;gt;y - pt0-&amp;gt;y;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);&lt;br /&gt;}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;IplImage* DetectAndDrawQuads(IplImage* img)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSeq* contours;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSeq* result;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvMemStorage *storage = cvCreateMemStorage(0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage* ret = cvCreateImage(cvGetSize(img), 8, 3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage* temp = cvCreateImage(cvGetSize(img), 8, 1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCvtColor(img, temp, CV_BGR2GRAY);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvFindContours(temp, storage, &amp;amp;contours, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(contours)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; result = cvApproxPoly(contours, sizeof(CvContour), storage, CV_POLY_APPROX_DP, cvContourPerimeter(contours)*0.02, 0);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(result-&amp;gt;total==4 &amp;amp;&amp;amp; fabs(cvContourArea(result, CV_WHOLE_SEQ)) &amp;gt; 20)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvPoint *pt[4];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0;i&amp;lt;4;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt[i] = (CvPoint*)cvGetSeqElem(result, i);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: teal;"&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;//to eliminate the outer recatngle,replcae 1 &amp;amp; 398 by&lt;br /&gt;//&amp;nbsp;the respective min and max value of x&lt;br /&gt;if(pt[0]-&amp;gt;x==1 &amp;amp;&amp;amp;&amp;nbsp; pt[1]-&amp;gt;x==1 &amp;amp;&amp;amp; pt[2]-&amp;gt;x==398 &amp;amp;&amp;amp;&amp;nbsp; pt[3]-&amp;gt;x==398)&lt;br /&gt;{}&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;cvLine(ret, *pt[0], *pt[1], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[1], *pt[2], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[2], *pt[3], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt[3], *pt[0], cvScalar(255));&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[0]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[0]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[0],pt[2],pt[1])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[1]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[1]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[1],pt[3],pt[2])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[2]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[2]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[2],pt[0],pt[3])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt[3]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt[3]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt[3],pt[1],pt[0])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&lt;br /&gt;n++;&lt;br /&gt;xt[n]=(int)((pt[0]-&amp;gt;x + pt[1]-&amp;gt;x + pt[2]-&amp;gt;x + pt[3]-&amp;gt;x)/4);&lt;br /&gt;yt[n]=(int)((pt[0]-&amp;gt;y + pt[1]-&amp;gt;y + pt[2]-&amp;gt;y + pt[3]-&amp;gt;y)/4);&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if(result-&amp;gt;total==3 &amp;amp;&amp;amp; fabs(cvContourArea(result, CV_WHOLE_SEQ)) &amp;gt; 20)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvPoint *pt1[3];&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int i=0;i&amp;lt;3;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pt1[i] = (CvPoint*)cvGetSeqElem(result, i);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt1[0], *pt1[1], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt1[1], *pt1[2], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvLine(ret, *pt1[2], *pt1[0], cvScalar(255));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;pt1[0]-&amp;gt;x&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;pt1[0]-&amp;gt;y&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;angle(pt1[0],pt1[2],pt1[1])&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;m++;&lt;br /&gt;xtr[m]=(int)((pt1[0]-&amp;gt;x + pt1[1]-&amp;gt;x + pt1[2]-&amp;gt;x)/3);&lt;br /&gt;ytr[m]=(int)((pt1[0]-&amp;gt;y + pt1[1]-&amp;gt;y + pt1[2]-&amp;gt;y)/3);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; contours = contours-&amp;gt;h_next;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseImage(&amp;amp;temp);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseMemStorage(&amp;amp;storage);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return ret;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;br /&gt;&amp;nbsp;&amp;nbsp; IplImage* img = cvLoadImage("C:/Users/amit/Desktop/iitb/1.png");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; IplImage* contourDrawn = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvNamedWindow("original");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvInitFont(&amp;amp;font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; contourDrawn = DetectAndDrawQuads(img);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(n!=-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;=n;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvPutText(contourDrawn, "Rectangle", cvPoint(xt[i],yt[i]), &amp;amp;font, cvScalar(255, 0, 0, 0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(m!=-1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;=m;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvPutText(contourDrawn, "triangle", cvPoint(xtr[i],ytr[i]), &amp;amp;font, cvScalar(255, 0, 0, 0));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; cvShowImage("original", img);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("contours");&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("contours", contourDrawn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvWaitKey(0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-3055803669825430017?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/3055803669825430017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/detection-of-shapes-like.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/3055803669825430017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/3055803669825430017'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/detection-of-shapes-like.html' title='Detection of shapes like quads,rectangle,triangle and other complex shapes using OpenCV'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Y1M_d82WF28/Tc5yuVwt-8I/AAAAAAAAABY/3e-PXakd99s/s72-c/1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-3976596855770422923</id><published>2011-05-14T01:33:00.000-07:00</published><updated>2011-05-14T01:33:22.549-07:00</updated><title type='text'>DTMF(Dual Tone Multi Frequency) or Mobile controlled bot</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;DTMF is Dual Tone Multi Frequency.The circuit is given by&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HadK_bSoHMo/Tc43i-GJfFI/AAAAAAAAABI/NHjC88F02Bs/s1600/Circuit-Description.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="292" j8="true" src="http://2.bp.blogspot.com/-HadK_bSoHMo/Tc43i-GJfFI/AAAAAAAAABI/NHjC88F02Bs/s640/Circuit-Description.jpg" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;The components required are:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;1) DTMF Decoder IC - MT8870 or&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;CM8870 &lt;br /&gt;2) atmega32 &lt;br /&gt;3) l293d &lt;br /&gt;4) cd7004 &lt;br /&gt;5) 100k resistances – 2 no. &lt;br /&gt;6)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;330k resistances &lt;br /&gt;7)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;10k resistances-2 no &lt;br /&gt;8)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;0.47 micro farad capacitor &lt;br /&gt;9)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;22pfarat capacitor – 4 no&lt;br /&gt;10)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;0.1micro farad capacitor &lt;br /&gt;11)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;3.57 mhz crytal &lt;br /&gt;12) 12mhz crystal &lt;br /&gt;13)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;push to on switch &lt;br /&gt;14)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;12v 100 rpm motor – 2no.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin: 0in 0in 12pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;15)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Battery - 6v&lt;br /&gt;16)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;74LS04-not gate&lt;br /&gt;17)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;IN4007 diode&lt;br /&gt;18)&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;LM7805&lt;/span&gt;&lt;span style="color: #333333;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-255e211b744aff65" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D255e211b744aff65%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DCFE412598ECDD3C8C7EF867AC080F647EA615EA.7326E016BDA95DE45C662B9B9580D2FC3C011927%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D255e211b744aff65%26offsetms%3D5000%26itag%3Dw160%26sigh%3DRprSeD3926G05EZWVqfIL3KFt_Y&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v20.nonxt5.googlevideo.com/videoplayback?id%3D255e211b744aff65%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3DCFE412598ECDD3C8C7EF867AC080F647EA615EA.7326E016BDA95DE45C662B9B9580D2FC3C011927%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3D255e211b744aff65%26offsetms%3D5000%26itag%3Dw160%26sigh%3DRprSeD3926G05EZWVqfIL3KFt_Y&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br style="mso-special-character: line-break;" /&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;span style="color: black;"&gt;Conventionally, Wireless-controlled robots use &lt;b style="mso-bidi-font-weight: normal;"&gt;RF&lt;/b&gt; circuits, which have the drawbacks of limited working range, limited frequency range and the limited control. Use of a mobile phone for robotic control can overcome these limitations. It provides the advantage of robust control, working range as large as the coverage area of the service provider, no interference with other controllers and up to twelve controls.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin: 0in 0in 12pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt;"&gt;&lt;span style="color: black;"&gt;For signaling, it will use dual-tone multi-frequency (&lt;/span&gt;&lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/DTMF"&gt;&lt;span style="color: windowtext; font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt;"&gt;DTMF&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt;"&gt;&lt;span style="color: black;"&gt;) tones. These are the tones that you hear when you press keys on a telephone keypad. The CM8870 IC or MT8870 IC interprets the tones as a 4-bit digital signal, which is input to microcontroller Atmega32.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-V6IEJIzIe68/Tc45VMLFszI/AAAAAAAAABM/g_r94GO_iqE/s1600/keypad.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="157" j8="true" src="http://3.bp.blogspot.com/-V6IEJIzIe68/Tc45VMLFszI/AAAAAAAAABM/g_r94GO_iqE/s320/keypad.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;span style="color: black;"&gt;So then based on which key is pressed, the robot will be able to interpret the tone and activate relays and such to turn on motors and move about.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;span style="color: black;"&gt;We use Handsfree headset of phone, which consists of TIP,which is connected to mt 8870, and ring and ground are grounded.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-KZIV_wtGhzk/Tc46gIeaLxI/AAAAAAAAABQ/Gr7xieun02Q/s1600/tip+bot.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="360" j8="true" src="http://4.bp.blogspot.com/-KZIV_wtGhzk/Tc46gIeaLxI/AAAAAAAAABQ/Gr7xieun02Q/s640/tip+bot.JPG" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;The picture of my bot is given below. I know it looks rough, but this is what&amp;nbsp;I along with my friends Sunil and Virupaksh&amp;nbsp;could manage within one night :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-8Zt-Xc3HCJg/Tc46tFtj0CI/AAAAAAAAABU/ZY7bMEC49wY/s1600/bot.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="301" j8="true" src="http://3.bp.blogspot.com/-8Zt-Xc3HCJg/Tc46tFtj0CI/AAAAAAAAABU/ZY7bMEC49wY/s320/bot.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="line-height: 15.6pt; margin: 0in 0in 12pt;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;The code is&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;#include&amp;lt;avr/io.h&amp;gt;&lt;br /&gt;#include&amp;lt;util/delay.h&amp;gt;&lt;br /&gt;#include&amp;lt;lcd4.c&amp;gt;&lt;br /&gt;#define CHECKBIT(x,b) x&amp;amp;(1&amp;lt;&amp;lt;b)&amp;nbsp; &amp;nbsp;//Checks bit status &lt;br /&gt;#define SETBIT(x,b) x|=(1&amp;lt;&amp;lt;b)&amp;nbsp;&amp;nbsp; &amp;nbsp;//Sets the particular bit &lt;br /&gt;#define CLEARBIT(x,b) x&amp;amp;=~(1&amp;lt;&amp;lt;b) &amp;nbsp;//Sets the particular bit &lt;br /&gt;#define TOGGLEBIT(x,b) x^=(1&amp;lt;&amp;lt;b) &amp;nbsp;//Toggles the particular bit &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;int check1()&lt;br /&gt;{&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;if((PINA &amp;amp; 0b00000001)==0b00000001)&lt;br /&gt;return 1;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;else&lt;br /&gt;return 0;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;int check2()&lt;br /&gt;{&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;if((PINA &amp;amp; 0b00000010)==0b00000010)&lt;br /&gt;return 1;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;else&lt;br /&gt;return 0;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;int check3()&lt;br /&gt;{&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;if((PINA &amp;amp; 0b00000100)==0b00000100)&lt;br /&gt;return 1;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;else&lt;br /&gt;return 0;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;int check4()&lt;br /&gt;{&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;if((PINA &amp;amp; 0b00001000)==0b00001000)&lt;br /&gt;return 1;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;else&lt;br /&gt;return 0;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;int main()&lt;br /&gt;{&amp;nbsp; &lt;br /&gt;DDRA=0x00;DDRD=0xFF;&lt;br /&gt;unsigned int k, h;&lt;br /&gt;port();&lt;br /&gt;initiate();&lt;br /&gt;pos(1,1);string("&lt;span style="color: black;"&gt;techieNITRKL",0&lt;/span&gt;);&lt;br /&gt;int a=0,b=0,c=0,d=0,f=0; &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;//PORTA=0x00;&lt;br /&gt;while(1)&lt;br /&gt;{&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;a=check1();&lt;br /&gt;b=check2();&lt;br /&gt;c=check3();&lt;br /&gt;d=check4();&lt;br /&gt;f=((a*1000) + (b*100) + (c*10) + d);&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;pos(2,1);number(f);&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;if(f==1110)&lt;br /&gt;{&lt;br /&gt;pos(2,7);number(2);//forward&lt;br /&gt;PORTD=0b00000101;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;else if(f==1011)&lt;br /&gt;{&lt;br /&gt;pos(2,7);number(4);//left&lt;br /&gt;PORTD=0b00000111;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;else if(f==1001)&lt;br /&gt;{&lt;br /&gt;pos(2,7);number(5);//back&lt;br /&gt;PORTD=0b00001010;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;else if(f==1010)&lt;br /&gt;{&lt;br /&gt;pos(2,7);number(6);//right&lt;br /&gt;PORTD=0b00001101;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;else&lt;br /&gt;{&lt;br /&gt;pos(2,7);string("P",0);&lt;br /&gt;PORTD=0b00001111;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;return 0;&lt;br /&gt;}&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: justify;"&gt;﻿&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;﻿&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-3976596855770422923?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/3976596855770422923/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/dtmfdual-tone-multi-frequency-or-mobile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/3976596855770422923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/3976596855770422923'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/dtmfdual-tone-multi-frequency-or-mobile.html' title='DTMF(Dual Tone Multi Frequency) or Mobile controlled bot'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HadK_bSoHMo/Tc43i-GJfFI/AAAAAAAAABI/NHjC88F02Bs/s72-c/Circuit-Description.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-474981952244120677</id><published>2011-05-13T21:24:00.000-07:00</published><updated>2011-05-13T21:24:10.812-07:00</updated><title type='text'>Add text to image</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div class="L0"&gt;The code is:&lt;/div&gt;&lt;div class="L0"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="L1"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="com"&gt;#include&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;"cv.h"&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L2"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="com"&gt;#include&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;"highgui.h"&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L2"&gt;#include &amp;lt;iostream&amp;gt;&lt;/div&gt;&lt;div class="L2"&gt;using namespace std;&lt;/div&gt;&lt;div class="L3"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L4"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="kwd"&gt;int&lt;/span&gt;&lt;span class="pln"&gt; main&lt;/span&gt;&lt;span class="pun"&gt;()&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L5"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L6"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ"&gt;IplImage&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;*&lt;/span&gt;&lt;span class="pln"&gt;img &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; cvLoadImage&lt;/span&gt;&lt;span class="pun"&gt;("C:/Users/amit/Desktop/BACKUP1.jpg"&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L7"&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L8"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="com"&gt;/* initialize font and add text */&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L9"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ"&gt;CvFont&lt;/span&gt;&lt;span class="pln"&gt; font&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L0"&gt;&lt;span class="pln"&gt;&amp;nbsp; cvInitFont&lt;/span&gt;&lt;span class="pun"&gt;(&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt;font&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; CV_FONT_HERSHEY_SIMPLEX&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;1.0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;1.0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; CV_AA&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L1"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="L1"&gt;&lt;span class="pln"&gt;cvPutText&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;img&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="str"&gt;"Hello ^_^"&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; cvPoint&lt;/span&gt;&lt;span class="pun"&gt;(4&lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; 4&lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt;font&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; cvScalar&lt;/span&gt;&lt;span class="pun"&gt;(255&lt;/span&gt;&lt;span class="pun"&gt;, 0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; 0&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;));&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L3"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="com"&gt;/* display the image */&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L4"&gt;&lt;span class="pln"&gt;&amp;nbsp; cvNamedWindow&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"image"&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; CV_WINDOW_AUTOSIZE&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L5"&gt;&lt;span class="pln"&gt;&amp;nbsp; cvShowImage&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"image"&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; img&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L6"&gt;&lt;span class="pln"&gt;&amp;nbsp; cvWaitKey&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="L7"&gt;&lt;span class="pln"&gt;&amp;nbsp; cvDestroyWindow&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="str"&gt;"image"&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;&amp;nbsp; cvReleaseImage&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;amp;&lt;/span&gt;&lt;span class="pln"&gt;img &lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd"&gt;return&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;span class="pln"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;span class="pun"&gt;The output is:&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Q7Tr8fLpN9E/Tc4CXorffAI/AAAAAAAAABE/pKdrxjYlc38/s1600/pan2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" j8="true" src="http://2.bp.blogspot.com/-Q7Tr8fLpN9E/Tc4CXorffAI/AAAAAAAAABE/pKdrxjYlc38/s320/pan2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;span class="pun"&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span style="font-family: Courier New;"&gt;&lt;span style="font-family: Times New Roman;"&gt;The command used initiating font ,size ,thickness is of format:&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="L7"&gt;&lt;span class="pun"&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span style="font-family: Courier New;"&gt;cvInitFont&lt;/span&gt;&lt;/span&gt;&lt;big&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span style="font-size: large;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/big&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;CvFont*&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; font&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, int&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; fontFace&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, double&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; hscale&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, double&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; vscale&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, double&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; shear=0&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, int&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; thickness=1&lt;/span&gt;&lt;/em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;, int&lt;/span&gt;&lt;em&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt; lineType=8&lt;/span&gt;&lt;/em&gt;&lt;big&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span style="font-size: large;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/big&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="pun"&gt;&lt;big&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span class="pln"&gt;&lt;span style="font-size: small;"&gt;The command &lt;span style="color: #20124d;"&gt;cvPutText() &lt;/span&gt;&lt;span style="color: black;"&gt;is used to wite the text on the image at required coordinates.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/big&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="pun"&gt;&lt;big&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;&lt;span class="pln"&gt;&lt;span style="font-family: Courier New; font-size: small;"&gt;cvPutText&lt;/span&gt;&lt;big&gt;(&lt;/big&gt;&lt;span style="font-size: small;"&gt;CvArr*&lt;em&gt; img&lt;/em&gt;, const char*&lt;em&gt; text&lt;/em&gt;, CvPoint&lt;em&gt; org&lt;/em&gt;, const CvFont*&lt;em&gt; font&lt;/em&gt;, CvScalar&lt;em&gt; color&lt;/em&gt;&lt;/span&gt;&lt;big&gt;)&lt;/big&gt;&lt;/span&gt;&lt;/span&gt;&lt;/big&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span style="color: #20124d;"&gt;&lt;span style="color: black;"&gt;&lt;/span&gt;&lt;div class="L7"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="L1"&gt;&lt;span class="pln"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;br /&gt;&lt;dd&gt;Draws a text string.&lt;br /&gt;&lt;table class="docutils field-list" frame="void" rules="none"&gt;&lt;colgroup&gt;&lt;col class="field-name"&gt;&lt;col class="field-body"&gt;&lt;/colgroup&gt;&lt;tbody valign="top"&gt;&lt;tr class="field"&gt;&lt;th class="field-name"&gt;Parameters:&lt;/th&gt;&lt;td class="field-body"&gt;&lt;ul class="first last simple"&gt;&lt;li&gt;&lt;em&gt;img&lt;/em&gt; – Input image&lt;/li&gt;&lt;li&gt;&lt;em&gt;text&lt;/em&gt; – String to print&lt;/li&gt;&lt;li&gt;&lt;em&gt;org&lt;/em&gt; – Coordinates of the bottom-left corner of the first letter&lt;/li&gt;&lt;li&gt;&lt;em&gt;font&lt;/em&gt; – Pointer to the font structure&lt;/li&gt;&lt;li&gt;&lt;em&gt;color&lt;/em&gt; – Text color&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/dd&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-474981952244120677?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/474981952244120677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/add-text-to-image.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/474981952244120677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/474981952244120677'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/add-text-to-image.html' title='Add text to image'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-Q7Tr8fLpN9E/Tc4CXorffAI/AAAAAAAAABE/pKdrxjYlc38/s72-c/pan2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-2548111115508461574</id><published>2011-05-13T11:16:00.000-07:00</published><updated>2011-05-13T11:16:39.198-07:00</updated><title type='text'>Color and shape based tracking of a ball</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;In image processing, there are various color models like&lt;strong&gt; RGB, HSV, HSI, CMYK&lt;/strong&gt;. For image proccessing regaurding color detection, RGB and HSV models are commonly used.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;HSV(&amp;nbsp;Hue Saturation Value )&lt;/strong&gt; color model solves our purpose of color detection best. In&lt;strong&gt; RGB&lt;/strong&gt;, to define a color, the ranges of red, blue and green must be defined, but in &lt;strong&gt;HSV&lt;/strong&gt; model, for a color we need to define only the value of Hue, which is defined as the color descriptor, or the&amp;nbsp;parameter for wavelength describing a particular color. The saturation is defined as the prominence of hue, and value is a parameter dependent upon the lighting conditions.&lt;br /&gt;&lt;br /&gt;There are ranges of Hue values fixed for different colors.These values can be seen on&lt;br /&gt;&lt;a href="http://mkweb.bcgsc.ca/color_summarizer/?faq"&gt;http://mkweb.bcgsc.ca/color_summarizer/?faq&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We&amp;nbsp;would&amp;nbsp;be needing a software &lt;span style="color: #351c75;"&gt;&lt;strong&gt;colorpic &lt;/strong&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;to check the hue saturation and value from images. It can be downloaded from&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&lt;a href="http://www.iconico.com/colorpic/"&gt;http://www.iconico.com/colorpic/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOG_video_class" id="BLOG_video-e4965f7f3d1d96f0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="movie" value="http://www.youtube.com/get_player"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowfullscreen" value="true"&gt;&lt;param name="flashvars" value="flvurl=http://v19.nonxt2.googlevideo.com/videoplayback?id%3De4965f7f3d1d96f0%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1D64014AEB79013E3B82AB7A6E5BB5F0DC29795F.2760507B0329DABF6ED5749DA20B6FBA8F3F8107%26key%3Dck1&amp;amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De4965f7f3d1d96f0%26offsetms%3D5000%26itag%3Dw160%26sigh%3DtRMy1PuOZ6C7k8Y8z_FcWIgvusg&amp;amp;autoplay=0&amp;amp;ps=blogger"&gt;&lt;embed src="http://www.youtube.com/get_player" type="application/x-shockwave-flash"width="320" height="266" bgcolor="#FFFFFF"flashvars="flvurl=http://v19.nonxt2.googlevideo.com/videoplayback?id%3De4965f7f3d1d96f0%26itag%3D5%26app%3Dblogger%26ip%3D0.0.0.0%26ipbits%3D0%26expire%3D1332573719%26sparams%3Did,itag,ip,ipbits,expire%26signature%3D1D64014AEB79013E3B82AB7A6E5BB5F0DC29795F.2760507B0329DABF6ED5749DA20B6FBA8F3F8107%26key%3Dck1&amp;iurl=http://video.google.com/ThumbnailServer2?app%3Dblogger%26contentid%3De4965f7f3d1d96f0%26offsetms%3D5000%26itag%3Dw160%26sigh%3DtRMy1PuOZ6C7k8Y8z_FcWIgvusg&amp;autoplay=0&amp;ps=blogger"allowFullScreen="true" /&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;To detect a color ball, we need to go through color and then shape detection&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP1:&lt;/span&gt; &lt;u&gt;Capture a frame from the camera&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;CvCapture* capture = cvCaptureFromCAM( 0 ); //0 is device id&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;IplImage* frame = cvQueryFrame( capture ); //frame is captured&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;cvQueryFrame() is used to capture a frame from camera of device id specied in the object capture.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP2:&lt;/span&gt;&lt;/strong&gt; &lt;strong&gt;&lt;u&gt;Convert the color model of image from RGB to HSV&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #20124d;"&gt;cvCvtColor(frame, hsv_frame, CV_BGR2HSV);&lt;/span&gt;&lt;br /&gt;It coverts the color model of the RGB image frame to HSV and stores it in hsv_frame without affecting frame.the format of this command is:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #20124d;"&gt;cvCvtColor(imginit, imgfinal, color space conversion);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;where,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imginit=image whose color space is to be changed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; imgfinal=modified color space image&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;color space conversion =CV_BGR2HSV //for rgb to hsv&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=CV_HSV2BGR//for hsv to rgb&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP3:&lt;/span&gt; &lt;u&gt;Specify the color to be detected by asigning the minimum and maximum values for hue saturation and value&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;span style="color: #20124d;"&gt;CvScalar hsv_min = cvScalar(35, 80, 170, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//min value of h, s and v&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&amp;nbsp;CvScalar hsv_max =&amp;nbsp; cvScalar(55, 130, 255, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //max value of h, s and v&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is in accordance with the color to be detected. It is also highly dependent on lighting conditions. The values of Hue Saturation and Value can be checked by using the software &lt;span style="color: #351c75;"&gt;&lt;strong&gt;colorpic&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP4:&lt;/span&gt;&lt;/strong&gt; &lt;span style="color: black;"&gt;&lt;strong&gt;&lt;u&gt;Color detection&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;cvInRangeS(hsv_frame, hsv_min, hsv_max, thresholded);&lt;/span&gt;&lt;br /&gt;This&amp;nbsp;command checks for the regions in the image having the values of h, s and v within the permissible range, i.e. between &lt;strong&gt;hsv_min&lt;/strong&gt; and &lt;strong&gt;hsv_&lt;/strong&gt;max,&amp;nbsp;and the binary image thus formed is stored in &lt;strong&gt;thresholded&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP5:&lt;/span&gt; &lt;u&gt;Shape detection i.e. detection of circle&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;cvSmooth( thresholded, thresholded, CV_GAUSSIAN, 11, 11 );&amp;nbsp;&amp;nbsp; //smoothing of image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This command is used to smooth a image using gaussian smoothing using a square of size 11x11. The area can range from 0x0 to 11x11, depending on whether the smoothing we require is used to detect small objects or not. The greater the area the better the detection of large objects.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #20124d;"&gt;&amp;nbsp; CvSeq* circles = cvHoughCircles(thresholded, storage, CV_HOUGH_GRADIENT, 2,thresholded-&amp;gt;height/6, 100, 50, 10, 400);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This command is used to detect circle shape in the binary image&lt;strong&gt; thresholded. &lt;/strong&gt;The format of the command is:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&lt;span class="identifier"&gt;cvHoughCircles&lt;/span&gt;(&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;image&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;circleStorage&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://www.emgu.com/wiki/files/1.3.0.0/html/2ce848f3-52cb-3ded-789f-f758e11a9912.htm"&gt;&lt;span style="color: #20124d;"&gt;HOUGH_TYPE&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;method&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;double&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;dp&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;double&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;minDist&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;double&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;param1&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;double&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;param2&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;minRadius&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;maxRadius&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #0b5394;"&gt;STEP6:&lt;/span&gt; &lt;u&gt;Draw a circle of desired color around the detected circle&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #20124d;"&gt;&lt;span class="identifier"&gt;cvCircle&lt;/span&gt;(&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/5he14kz8" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;IntPtr&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;img&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/bk9hwzbw" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;Point&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;center&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;radius&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/3b69667b-68aa-01da-7a12-1960b0721dd9.htm"&gt;&lt;span style="color: #20124d;"&gt;MCvScalar&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;color&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;thickness&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://www.emgu.com/wiki/files/1.5.0.0/Help/html/d8f85b6c-2176-bb5e-625d-68f4e8e3a4b1.htm"&gt;&lt;span style="color: #20124d;"&gt;LINE_TYPE&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;lineType&lt;/span&gt;,&lt;/span&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/td2s409d" target="_blank"&gt;&lt;span style="color: #20124d;"&gt;int&lt;/span&gt;&lt;/a&gt;&lt;span style="color: #20124d;"&gt; &lt;span class="parameter"&gt;shift&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It is used to draw a circle of radius r at centre x,y.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Now, you are ready to detect a color ball. :)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The complete code is:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;cvaux.h&amp;gt;&lt;br /&gt;#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;cxcore.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include&amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;#include &amp;lt;string.h&amp;gt;&lt;br /&gt;#include &amp;lt;assert.h&amp;gt;&lt;br /&gt;#include &amp;lt;math.h&amp;gt;&lt;br /&gt;#include &amp;lt;float.h&amp;gt;&lt;br /&gt;#include &amp;lt;limits.h&amp;gt;&lt;br /&gt;#include &amp;lt;time.h&amp;gt;&lt;br /&gt;#include &amp;lt;ctype.h&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;IplImage* frame = NULL;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvCapture* capture = cvCaptureFromCAM( 0 );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !capture )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: capture is NULL \n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("video", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("colordetect", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvScalar hsv_min = cvScalar(35, 80, 170, 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvScalar hsv_max =&amp;nbsp; cvScalar(55, 130, 255, 0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSize size = cvGetSize(frame);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage*&amp;nbsp; hsv_frame&amp;nbsp;&amp;nbsp;&amp;nbsp; = cvCreateImage(size, IPL_DEPTH_8U, 3);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage*&amp;nbsp; thresholded&amp;nbsp;&amp;nbsp; = cvCreateImage(size, IPL_DEPTH_8U, 1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //capture image from cam&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !frame )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: frame is null...\n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //conversion of color model from rgb to hsv&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCvtColor(frame, hsv_frame, CV_BGR2HSV);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //color detection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvInRangeS(hsv_frame, hsv_min, hsv_max, thresholded);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Memory for hough circles&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvMemStorage* storage = cvCreateMemStorage(0);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Smoothing of image as cvHoughCircles works better on smoothed image&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvSmooth( thresholded, thresholded, CV_GAUSSIAN, 11, 11 );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //shape detection-circle shape&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvSeq* circles = cvHoughCircles(thresholded, storage, CV_HOUGH_GRADIENT, 2,thresholded-&amp;gt;height/6, 100, 50, 10, 400);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"no. of circles="&amp;lt;&amp;lt;circles-&amp;gt;total;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //drawing circle around the detected circle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i = 0; i &amp;lt; circles-&amp;gt;total; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; float* p = (float*)cvGetSeqElem( circles, i );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cout&amp;lt;&amp;lt;"x= "&amp;lt;&amp;lt;p[0]&amp;lt;&amp;lt;"y= "&amp;lt;&amp;lt;p[1]&amp;lt;&amp;lt;"r= "&amp;lt;&amp;lt;p[2]&amp;lt;&amp;lt;endl;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvCircle( frame, cvPoint(cvRound(p[0]),cvRound(p[1])),cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //display image showing ball detected&lt;br /&gt;&amp;nbsp;cvShowImage("video", frame);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //color detected image&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvShowImage("colordetect", thresholded);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //release memry storage&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseMemStorage(&amp;amp;storage);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //wait for 10 sec and continue or break if "ESC"is pressed&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (cvWaitKey(10) &amp;amp; 255) == 27 ) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //release capture&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseCapture( &amp;amp;capture );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvDestroyWindow( "mywindow" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-2548111115508461574?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/2548111115508461574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/color-and-shape-based-tracking-of-ball.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/2548111115508461574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/2548111115508461574'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/color-and-shape-based-tracking-of-ball.html' title='Color and shape based tracking of a ball'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-7240614350960150889</id><published>2011-05-11T08:37:00.000-07:00</published><updated>2011-05-11T08:37:39.954-07:00</updated><title type='text'>Take Video input from webcam and store it as a video file</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&amp;nbsp;In the previous article we discussed how to install OpenCV and how to&amp;nbsp;read an image&amp;nbsp;and display it.&lt;br /&gt;Now, let’s go through the code regaurding how to&amp;nbsp;take input from webcam and save it to a video file.&amp;nbsp;&lt;strong&gt;&lt;u&gt;&lt;span style="color: #674ea7;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;A video is a collection of images captured so fast that we cannot recognise the difference due to persistence of vision.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;u&gt;&lt;span style="color: #674ea7;"&gt;Code:&lt;/span&gt;&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;#include &amp;lt;opencv/cvaux.h&amp;gt;&lt;br /&gt;#include &amp;lt;opencv/highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;opencv/cxcore.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include&amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;int main(int argc, char* argv[])&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;int coun=0;&lt;br /&gt;int camera_index = 0;&lt;br /&gt;IplImage* frame = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvCapture* capture = cvCaptureFromCAM( 0 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !capture )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: capture is NULL \n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double cam_w = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; double cam_h = cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("* Capture properties: %f x %f - %f fps", cam_w, cam_h, 18);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvNamedWindow("video", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvVideoWriter* writer = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; writer = cvCreateVideoWriter("out.avi", CV_FOURCC_DEFAULT, 18, cvSize((int)cam_w,(int)cam_h), 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Check for creation of writer&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (writer == NULL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("!!! ERROR: cvCreateVideoWriter");&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !frame )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: frame is null...\n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;cvShowImage("video", frame);&lt;br /&gt;&amp;nbsp;cvWriteFrame(writer, frame);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( (cvWaitKey(10) &amp;amp; 255) == 27 ) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseVideoWriter(&amp;amp;writer);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvReleaseCapture( &amp;amp;capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvDestroyWindow( "mywindow" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #674ea7;"&gt;&lt;strong&gt;&lt;u&gt;Explanation:&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;CvCapture* capture = cvCaptureFromCAM( 0 );&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This function takes as its argument the&amp;nbsp;device ID of camera from which video is to be captured&amp;nbsp;and then returns a pointer to a CvCapture structure. This structure contains all of the information about the&amp;nbsp;video. When created in this way, the CvCapture structure is initialized to the beginning of video input capture.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;writer = cvCreateVideoWriter("out.avi",CV_FOURCC_DEFAULT,18, cvSize((int)cam_w,(int)cam_h),1);&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This function is used to create a writer to write the captured video to the video file "out.avi".&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;strong&gt;frame = cvQueryFrame( capture );&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Once inside of the &lt;code&gt;while(1)&lt;/code&gt; loop, we begin taking input from the camera.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;if( (cvWaitKey(10) &amp;amp; 255) == 27 ) break;&lt;/strong&gt;&lt;br /&gt;Here the code waits for 10 ms and continues execution until "Esc" is pressed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;cvReleaseVideoWriter(&amp;amp;writer);&lt;/strong&gt;&lt;br /&gt;Because there was no more video data or because the user hit the Esc key, after the video has been successfully written to "out.avi", we need to release the writer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&amp;nbsp;cvReleaseCapture( &amp;amp;capture );&lt;/strong&gt;&lt;br /&gt;When we have exited the read loop (because there was no more video data or because the user hit the Esc key) we can free the memory associated with the &lt;code&gt;CvCapture&lt;/code&gt; structure with the above function.&lt;br /&gt;&lt;br /&gt;Now if only the processing of video is required and writting to video file is not required ,yhen we can remove the writer and code will be as follows:&lt;br /&gt;&lt;br /&gt;#include &amp;lt;opencv/cvaux.h&amp;gt;&lt;br /&gt;#include &amp;lt;opencv/highgui.h&amp;gt;&lt;br /&gt;#include &amp;lt;opencv/cxcore.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;#include&amp;lt;iostream&amp;gt;&lt;br /&gt;using namespace std;&lt;br /&gt;int main()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IplImage* frame = NULL;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CvCapture* capture = cvCaptureFromCAM( 0 );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !capture )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: capture is NULL \n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;cvNamedWindow("video", CV_WINDOW_AUTOSIZE);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frame = cvQueryFrame( capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if( !frame )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fprintf( stderr, "ERROR: frame is null...\n" );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; getchar();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;cvShowImage("video", frame);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;if( (cvWaitKey(10) &amp;amp; 255) == 27 ) break;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;cvReleaseCapture( &amp;amp;capture );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cvDestroyWindow( "mywindow" );&lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-7240614350960150889?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/7240614350960150889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/take-video-input-from-webcam-and-store.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/7240614350960150889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/7240614350960150889'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/take-video-input-from-webcam-and-store.html' title='Take Video input from webcam and store it as a video file'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7908064383434805455.post-9212632413776844951</id><published>2011-05-11T05:24:00.000-07:00</published><updated>2011-07-12T11:06:29.254-07:00</updated><title type='text'>Introduction to OpenCV for Image Processing</title><content type='html'>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;u&gt;&lt;span style="color: #674ea7;"&gt;&lt;b&gt;OpenCV&lt;/b&gt; &lt;/span&gt;(Open Source Computer Vision)&lt;/u&gt; is a computer vision library available from [&lt;a href="http://opencvlibrary.sourceforge.net/" target="_blank"&gt;http://opencvlibrary.sourceforge.net/&lt;/a&gt;]. It is an open source library written in C and C++ and runs under Windows, Linux and Mac OS X. OpenCV has lot of inbuilt functions that you can use for your image processing and computer vision needs. It is mainly aimed at real time applications.&lt;br /&gt;&lt;br /&gt;&lt;span class="goog_qs-tidbit goog_qs-tidbit-0"&gt;In this article,I will&amp;nbsp;be telling u&amp;nbsp;how to install OpenCV on your&lt;/span&gt; computer and&amp;nbsp;integrating with&amp;nbsp;Code::Blocks IDE so that you can say ‘hello’ to the world of image processing.&lt;br /&gt;&lt;br /&gt;The latest version of OpenCV can be downloaded from &amp;nbsp;&lt;a href="http://sourceforge.net/projects/opencvlibrary/files/opencv-doc/Tutorials%2C%20Presentations/"&gt;http://sourceforge.net/projects/opencvlibrary/files/opencv-doc/Tutorials%2C%20Presentations/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="con_style7"&gt;&lt;span style="color: #674ea7;"&gt;&lt;b&gt;Configuring Code::Blocks and integrating OpenCV&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;&lt;span style="color: #674ea7;"&gt;STEP1:&lt;/span&gt;&lt;/b&gt; From the main menu select: &lt;b&gt;Settings -&amp;gt; Compiler and debugger&lt;/b&gt;&lt;br /&gt;Set the &lt;b&gt;Selected Compiler&lt;/b&gt; to &lt;b&gt;GNU GCC Compiler&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In the window select, &lt;b&gt;Global compiler settings&lt;/b&gt; and go to the tab,&amp;nbsp;&lt;b&gt;Linker Settings&amp;nbsp;&lt;/b&gt;&lt;br /&gt;Click &lt;b&gt;Add&lt;/b&gt; and add all the following directories one by one&lt;br /&gt;&lt;br /&gt;C:\OpenCV2.0\lib\libcv200.dll.a&lt;br /&gt;C:\OpenCV2.0\lib\libcvaux200.dll.a&lt;br /&gt;C:\OpenCV2.0\lib\libcxcore200.dll.a&lt;br /&gt;C:\OpenCV2.0\lib\libcxts200.dll.a&lt;br /&gt;C:\OpenCV2.0\lib\libhighgui200.dll.a&lt;br /&gt;C:\OpenCV2.0\lib\libml200.dll.a&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-HPeTTbI-V0o/Tcp3Bzp2eEI/AAAAAAAAAAM/SPq6lkZbARE/s1600/set1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" j8="true" src="http://2.bp.blogspot.com/-HPeTTbI-V0o/Tcp3Bzp2eEI/AAAAAAAAAAM/SPq6lkZbARE/s320/set1.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the window select, &lt;b&gt;Global compiler settings&lt;/b&gt; and go to the tab, &lt;b&gt;Search directories -&amp;gt; Compiler&lt;/b&gt;&lt;br /&gt;Click &lt;b&gt;Add&lt;/b&gt; and add all the following directories one by one&lt;br /&gt;&lt;br /&gt;C:\OpenCV2.0\include&lt;br /&gt;C:\OpenCV2.0\include\opencv&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ggFvgUhFEbU/Tcp30bKPclI/AAAAAAAAAAQ/AeyqjKlVipE/s1600/set2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="291" j8="true" src="http://4.bp.blogspot.com/-ggFvgUhFEbU/Tcp30bKPclI/AAAAAAAAAAQ/AeyqjKlVipE/s320/set2.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Now go to the &lt;b&gt;Linker&lt;/b&gt; tab (next to the &lt;b&gt;Compiler&lt;/b&gt; tab) and add the following directory&lt;br /&gt;&lt;br /&gt;C:\OpenCV2.0\lib&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-3bRHG-u4IYA/Tcp4jXB2b_I/AAAAAAAAAAU/-TijyG3dJuE/s1600/set3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" j8="true" src="http://1.bp.blogspot.com/-3bRHG-u4IYA/Tcp4jXB2b_I/AAAAAAAAAAU/-TijyG3dJuE/s320/set3.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="color: #674ea7;"&gt;&lt;b&gt;STEP2: &lt;/b&gt;&lt;/span&gt;&lt;span style="color: black;"&gt;In the header file &lt;b&gt;cxoperations.hpp&lt;/b&gt; ,edit it by adding &amp;nbsp; &lt;b&gt;__MINGW32__&lt;/b&gt;&amp;nbsp; to the end of &lt;b&gt;line number 68&lt;/b&gt; or replace the line by the line given below.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;&amp;nbsp;#if __GNUC__ &amp;gt;= 4 || __MINGW32__ &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, you have completed the installation of OpenCV and are good to go.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #674ea7;"&gt;Lets start with a basic program like reading an image and displaying it.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;//&lt;span style="color: #674ea7;"&gt;Headers to include opencv library&lt;/span&gt;&lt;br /&gt;#include &amp;lt;cv.h&amp;gt;&lt;br /&gt;#include &amp;lt;cxcore.h&amp;gt;&lt;br /&gt;#include &amp;lt;highgui.h&amp;gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;IplImage* img = cvLoadImage("E:/walls/014.jpg");&amp;nbsp;&amp;nbsp;&amp;nbsp; //load an image. Note the "/" is used.&lt;br /&gt;&lt;br /&gt;cvNamedWindow("Image", CV_WINDOW_AUTOSIZE);&amp;nbsp;&amp;nbsp;//Create window to display image &lt;br /&gt;&lt;br /&gt;cvShowImage("Image", img);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//View image&lt;br /&gt;&lt;br /&gt;cvWaitKey(0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Program waits till eternity for a key&amp;nbsp;to be&amp;nbsp;pressed.&lt;br /&gt;&lt;br /&gt;cvDestroyWindow("Image");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Destroy window&lt;br /&gt;&lt;br /&gt;cvReleaseImage(&amp;amp;img);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//Release image&lt;br /&gt;&lt;br /&gt;return 0;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-P7aGos9cJ5M/Tcp7OsKZcoI/AAAAAAAAAAY/x6viFXOKff8/s1600/67LG.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="210" j8="true" src="http://1.bp.blogspot.com/-P7aGos9cJ5M/Tcp7OsKZcoI/AAAAAAAAAAY/x6viFXOKff8/s320/67LG.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The image will be displayed till a key is pressed.&lt;br /&gt;Congrats! u have just written ur 1st OpenCV program. :) &lt;br /&gt;&lt;br /&gt;In case of any queries, contact me at my mail:- &lt;a href="mailto:nayakamitarup@gmail.com"&gt;nayakamitarup@gmail.com&lt;/a&gt;&amp;nbsp; or reply on the post.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7908064383434805455-9212632413776844951?l=nayakamitarup.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nayakamitarup.blogspot.com/feeds/9212632413776844951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/introduction-to-opencv-for-image.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/9212632413776844951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7908064383434805455/posts/default/9212632413776844951'/><link rel='alternate' type='text/html' href='http://nayakamitarup.blogspot.com/2011/05/introduction-to-opencv-for-image.html' title='Introduction to OpenCV for Image Processing'/><author><name>@mit</name><uri>http://www.blogger.com/profile/06482287825609490566</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://2.bp.blogspot.com/-o-UBFmnc0xY/TzlynpXQa6I/AAAAAAAAALs/MDg6APsYKXI/s220/Shikamaru-Nara-1-7IW8BTC01V-1024x768.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-HPeTTbI-V0o/Tcp3Bzp2eEI/AAAAAAAAAAM/SPq6lkZbARE/s72-c/set1.JPG' height='72' width='72'/><thr:total>10</thr:total></entry></feed>
