{"id":1153,"date":"2011-04-08T16:58:26","date_gmt":"2011-04-08T23:58:26","guid":{"rendered":"http:\/\/mcclanahoochie.com\/blog\/?post_type=portfolio&#038;p=1153"},"modified":"2023-06-10T10:32:20","modified_gmt":"2023-06-10T17:32:20","slug":"computer-vision-on-android-opencv","status":"publish","type":"post","link":"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/","title":{"rendered":"Computer Vision on Android with OpenCV"},"content":{"rendered":"<h3>March 2011<\/h3>\n<p><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1154\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/viewercv1\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?fit=628%2C400&amp;ssl=1\" data-orig-size=\"628,400\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"viewercv1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?fit=628%2C400&amp;ssl=1\" class=\"size-full wp-image-1154 alignnone\" title=\"viewercv1\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?resize=305%2C194\" alt=\"\" width=\"305\" height=\"194\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?w=628&amp;ssl=1 628w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/viewercv1.png?resize=300%2C191&amp;ssl=1 300w\" sizes=\"(max-width: 305px) 100vw, 305px\" \/><\/a><\/p>\n<p>With the help of <a href=\"http:\/\/developer.motorola.com\/docstools\/motodevstudio\/download\/\" target=\"_blank\" rel=\"noopener\">Motodev Studio for Android<\/a>, I&#8217;ve\u00a0extracted\u00a0the\u00a0<a href=\"https:\/\/code.google.com\/p\/viewercv\/source\/browse\/android-opencv\">android-opencv<\/a> JNI\u00a0camera example and spawned a fork of my original computer vision app,\u00a0<a href=\"http:\/\/mcclanahoochie.com\/blog\/portfolio\/computer-vision-on-android\/\" target=\"_blank\" rel=\"noopener\">Viewer<\/a>, to an OpenCV version: <strong><em><a href=\"https:\/\/market.android.com\/details?id=com.viewercv\" target=\"_blank\" rel=\"noopener\">ViewerCV<\/a><\/em><\/strong>. Both are\u00a0available on <a href=\"https:\/\/github.com\/mcclanahoochie\/viewercv\" target=\"_blank\" rel=\"noopener\">Git Hub<\/a>\u00a0as open source software example of doing Computer Vision on Android with OpenCV.<\/p>\n<p><span style=\"font-family: Arial, Helvetica, sans-serif; font-size: x-large; line-height: 19px; font-weight: bold; color: #0500fe;\"><a href=\"https:\/\/market.android.com\/details?id=com.viewercv\" target=\"_blank\" rel=\"noopener\">Viewer<img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1569\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/icon\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/icon.png?fit=72%2C72&amp;ssl=1\" data-orig-size=\"72,72\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"viewercv-icon\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/icon.png?fit=72%2C72&amp;ssl=1\" class=\"alignnone size-full wp-image-1569\" title=\"viewercv-icon\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/icon.png?resize=100%2C100\" alt=\"ViewerCV\" width=\"100\" height=\"100\" \/><\/a><\/span><\/p>\n<p><strong>Features<\/strong>:<\/p>\n<ul>\n<li>*FAST Features (default android-opencv example)<\/li>\n<li>*Square detection<\/li>\n<li>*Sobel Filtering<\/li>\n<li>*Histogram Equalization<\/li>\n<li>*Gradient\u00a0edge\u00a0morphology (Neon mode)<\/li>\n<li>*Local Contrast\u00a0Enhancement\u00a0(Vivid mode)<\/li>\n<li><em>*Live HDR\u00a0<\/em>(high dynamic range + tonemapping) mode&#8230;\n<ul>\n<li><strong><em> &#8212; <a href=\"http:\/\/mcclanahoochie.com\/blog\/portfolio\/real-time-hdr-tonemapping\" target=\"_blank\" rel=\"noopener\">Project Page<\/a><\/em><\/strong><\/li>\n<li><strong><em> &#8212; <\/em><\/strong><a href=\"http:\/\/www.youtube.com\/watch?v=61oXtKp9SQI\">Youtube Video<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>Quick GUI Readme:<\/p>\n<ul>\n<li>*&#8217;Menu&#8217; = changes processing effect<\/li>\n<li>*&#8217;Mode&#8217; = cycles options within an effect<\/li>\n<li>*&#8217;Menu&gt;Settings&#8217; = adjusts resolution<\/li>\n<li>*&#8217;Pic&#8217; = saves a screenshot to the sdcard<\/li>\n<\/ul>\n<p><span style=\"font-size: small;\"><span style=\"line-height: 24px;\"><br \/>\n<\/span><\/span><\/p>\n<p>Now on the <strong><a href=\"https:\/\/market.android.com\/details?id=com.viewercv\" target=\"_blank\" rel=\"noopener\">Android Market<\/a>!!!<\/strong>\u00a0(please rate\/comment!)<\/p>\n<p>Also available as FOSS on <a href=\"https:\/\/github.com\/mcclanahoochie\/viewercv\" target=\"_blank\" rel=\"noopener\">GitHub<\/a>\u00a0(please play fair).<\/p>\n<p>&nbsp;<\/p>\n<p>Screens:<\/p>\n<p><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1570\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/attachment\/4\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"HDR-Contrast-Mapping\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1570\" title=\"HDR Contrast Mapping\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/4.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1572\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/attachment\/1\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Square-Detection\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1572\" title=\"Square-Detection\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/1.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1573\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/attachment\/2\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"Sobel-Filter\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1573\" title=\"Sobel-Filter\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/2.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1574\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/attachment\/5\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"FAST-Features\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1574\" title=\"FAST-Features\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/5.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><br \/>\n<a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1749\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/device-neon\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"device-neon\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1749\" title=\"Neon\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png?resize=500%2C281&amp;ssl=1 500w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-neon.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><a href=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"1894\" data-permalink=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/device-vivid\/#main\" data-orig-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png?fit=854%2C480&amp;ssl=1\" data-orig-size=\"854,480\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;}\" data-image-title=\"device-vivid\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png?fit=854%2C480&amp;ssl=1\" class=\"alignnone size-medium wp-image-1894 title=\" title=\"Vivid\" src=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid-300x168.png?resize=270%2C151\" alt=\"\" width=\"270\" height=\"151\" srcset=\"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png?resize=300%2C168&amp;ssl=1 300w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png?resize=500%2C281&amp;ssl=1 500w, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/device-vivid.png?w=854&amp;ssl=1 854w\" sizes=\"(max-width: 270px) 100vw, 270px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>March 2011 With the help of Motodev Studio for Android, I&#8217;ve\u00a0extracted\u00a0the\u00a0android-opencv JNI\u00a0camera example and spawned a fork of my original computer vision app,\u00a0Viewer, to an OpenCV version: ViewerCV. Both are\u00a0available on Git Hub\u00a0as open source software example of doing Computer Vision on Android with OpenCV. Viewer Features: *FAST Features (default android-opencv example) *Square detection *Sobel &#8230; <a title=\"Computer Vision on Android with OpenCV\" class=\"read-more\" href=\"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/computer-vision-on-android-opencv\/\" aria-label=\"Read more about Computer Vision on Android with OpenCV\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[123,113,54,92,101,29],"class_list":["post-1153","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-android","tag-computer-vision","tag-image-processing","tag-opencv","tag-programming","tag-projects"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pZdXI-iB","jetpack-related-posts":[{"id":950,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/01\/computer-vision-on-android\/","url_meta":{"origin":1153,"position":0},"title":"Computer Vision on Android in Java","author":"mcclanahoochie","date":"January 4, 2011","format":false,"excerpt":"January 2010 \u00a0 Over the holiday break, I finally created an Android\u00a0app that allows image processing on the camera's raw data, and displays it back on the screen. It only uses\u00a0Java on the CPU for now, but in my free time I'll be porting the code to OpenGL ES to\u2026","rel":"","context":"In \"android\"","block_context":{"text":"android","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/android\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/01\/device-sobel-2-small.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1731,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/08\/image-processing-with-libjacket-opencv\/","url_meta":{"origin":1153,"position":1},"title":"Image processing with LibJacket + OpenCV","author":"mcclanahoochie","date":"August 24, 2011","format":false,"excerpt":"Update: one year later:\u00a0ArrayFire+OpenCV The OpenCV library is the de-facto standard for doing computer vision and image processing research projects. OpenCV includes several hundreds of computer vision algorithms, aimed for use in real-time vision applications. LibJacket is a matrix library built on CUDA. LibJacket offers hundreds of general matrix and\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/08\/Screen-shot-2011-08-24-at-2.42.52-PM-1024x640.png?resize=525%2C300 1.5x"},"classes":[]},{"id":1177,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/04\/real-time-hdr-tonemapping\/","url_meta":{"origin":1153,"position":2},"title":"Single Camera Real Time HDR Tonemapping","author":"mcclanahoochie","date":"April 26, 2011","format":false,"excerpt":"April 2011 \u00a0 Abstract As a final project for my Computational Photography class at Georgia Tech, I created an application that uses a single video camera to create tonemapped HDR images in real time. This project's inspiration comes from Soviet Montage Production's DSLR HDR video. The app runs on Linux\u2026","rel":"","context":"In \"computational photography\"","block_context":{"text":"computational photography","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/computational-photography\/"},"img":{"alt_text":"contrast mapping","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map-1024x640.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map-1024x640.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/04\/map-1024x640.png?resize=525%2C300 1.5x"},"classes":[]},{"id":874,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/01\/laser-projection-vision-system\/","url_meta":{"origin":1153,"position":3},"title":"Laser Projection Vision System","author":"mcclanahoochie","date":"January 1, 2011","format":false,"excerpt":"September 2008 A project at GTRI\u00a0FPTD I worked on\u00a0involving combining a color vision system with a 2D laser projector. Case Study about the project here: \u00a0Using Lasers to Identify Substandard Food. With\u00a0Python and OpenCV,\u00a0I got the system to find contours with the camera, and tell the laser to draw\u00a0them in\u2026","rel":"","context":"In \"computer vision\"","block_context":{"text":"computer vision","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/computer-vision\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/01\/laser_contours2.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":1896,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/11\/gpu-tv-l1-optical-flow-with-libjacket\/","url_meta":{"origin":1153,"position":4},"title":"GPU TV-L1 Optical Flow with ArrayFire","author":"mcclanahoochie","date":"November 6, 2011","format":false,"excerpt":"Update 1: LibJacket has been renamed to\u00a0\u00a0ArrayFire. Update 2: Huang Chao-Hui was nice enough to port the LibJacket code mentioned here to ArrayFire - see his work here. As one of my\u00a0Computer Vision\u00a0class\u00a0projects, I decided to implement optical flow, because I wanted to learn more about optical flow, and also\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/11\/jkt-oflow-tvl1-1024x626.png?resize=525%2C300 1.5x"},"classes":[]},{"id":1810,"url":"https:\/\/mcclanahoochie.com\/blog\/2011\/09\/opencv-vs-libjacket-gpu-sobel-filtering\/","url_meta":{"origin":1153,"position":5},"title":"OpenCV vs. LibJacket: GPU Sobel Filtering","author":"mcclanahoochie","date":"September 24, 2011","format":false,"excerpt":"Update: LibJacket has been renamed to\u00a0\u00a0ArrayFire. In response to a comment on a previous post about integrating LibJacket into an OpenCV project, below is just a simple FYI performance comparison of OpenCV's GPU Sobel filter versus LibJacket's conv2\u00a0convolution\u00a0filter (with a sobel kernel)... This is an evolutionary post, so be sure\u2026","rel":"","context":"In \"arrayfire\"","block_context":{"text":"arrayfire","link":"https:\/\/mcclanahoochie.com\/blog\/tag\/arrayfire\/"},"img":{"alt_text":"Sobel filter: OpenCV GPU vs. LibJacket","src":"https:\/\/i0.wp.com\/mcclanahoochie.com\/blog\/wp-content\/uploads\/2011\/09\/cv-versus-jkt.png?resize=350%2C200","width":350,"height":200},"classes":[]}],"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/comments?post=1153"}],"version-history":[{"count":0,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/posts\/1153\/revisions"}],"wp:attachment":[{"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/media?parent=1153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/categories?post=1153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mcclanahoochie.com\/blog\/wp-json\/wp\/v2\/tags?post=1153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}