<?xml version="1.0" encoding="UTF-8" standalone="no"?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0"><channel><title>OpenCV All Platform</title><description></description><managingEditor>noreply@blogger.com (Undermine)</managingEditor><pubDate>Wed, 28 Aug 2024 22:14:36 -0700</pubDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">20</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">5</openSearch:itemsPerPage><link>http://imageopencv.blogspot.com/</link><language>en-us</language><itunes:explicit>no</itunes:explicit><itunes:subtitle/><itunes:owner><itunes:email>noreply@blogger.com</itunes:email></itunes:owner><item><title>การทำ edge detection</title><link>http://imageopencv.blogspot.com/2010/02/edge-detection.html</link><category>Image processing</category><category>Sample code Opencv</category><author>noreply@blogger.com (Undermine)</author><pubDate>Thu, 18 Feb 2010 05:26:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6228891560010696988.post-7117315549058779080</guid><description>&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;ตัวอย่างนี้แสดงถึงวิธีการใช้คำสั่งของ OpenCV เพื่อทำ edge detection โดยใช้วิธีของ Canny&lt;/span&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;pre&gt;#include &lt;iostream&gt;
using namespace std;

#include &lt;cv.h&gt;
#include &lt;cxcore.h&gt;
#include &lt;highgui.h&gt;

#define CAMERA_ID 0
#define ORG_IMAGE_DISPLAY  "original image"
#define PROCESSED_IMAGE_DISPLAY "processed image"

#define STRONG_EDGE_TH 100
#define WEAK_EDGE_TH 10

int main( int argc, char **argv )
{
    // create camera capture object.
    CvCapture *pCapture = NULL;
    pCapture = cvCreateCameraCapture( CAMERA_ID );
    if ( pCapture == NULL )
        {
            cout &amp;lt;&amp;lt; "ERROR: Failed to open camera" &amp;lt;&amp;lt; endl;
            return EXIT_FAILURE;
        }

    // create windows for displaying the captured image
    // and the captured image.
    cvNamedWindow( ORG_IMAGE_DISPLAY );
    cvNamedWindow( PROCESSED_IMAGE_DISPLAY );

    // capture, process, and display
    // until user hit any key of the keyboard
    IplImage *pOrgImage = NULL;
    IplImage *pProcessedImage = NULL;
    do
    {
        // release old image
        // before creating a new one
        if ( pProcessedImage != NULL )
            {
             cvReleaseImage( &amp;amp;pProcessedImage );
             pProcessedImage = NULL;
            }

        // capture new image
        pOrgImage = cvQueryFrame( pCapture );

        // create image which has the same width, height, depth, and number of channels
        // as the original image for put the result of processing.
        pProcessedImage = cvCreateImage( cvSize( pOrgImage-&amp;gt;width, pOrgImage-&amp;gt;height ),
                    pOrgImage-&amp;gt;depth, 1 );

        // do canny edge dectection
        cvCvtColor( pOrgImage, pProcessedImage, CV_BGR2GRAY );
        cvCanny( pProcessedImage, pProcessedImage, STRONG_EDGE_TH, WEAK_EDGE_TH );

        // display images
        cvShowImage( ORG_IMAGE_DISPLAY, pOrgImage );
        cvShowImage( PROCESSED_IMAGE_DISPLAY, pProcessedImage );
    } while ( cvWaitKey( 1 ) == -1 );

    // release old image
    if ( pProcessedImage != NULL )
        {
            cvReleaseImage( &amp;amp;pProcessedImage );
            pProcessedImage = NULL;
        }

    // before exiting the program,
    // destroy the display windows and
    // release the cameara capture object.
    cvDestroyWindow( ORG_IMAGE_DISPLAY );
    cvDestroyWindow( PROCESSED_IMAGE_DISPLAY );
    cvReleaseCapture( &amp;amp;pCapture );
    return 0;
}&lt;/highgui.h&gt;&lt;/cxcore.h&gt;&lt;/cv.h&gt;&lt;/iostream&gt;&lt;/pre&gt;&lt;/blockquote&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>การตัดสี</title><link>http://imageopencv.blogspot.com/2010/02/blog-post_18.html</link><category>Image processing</category><category>Sample code Opencv</category><author>noreply@blogger.com (Undermine)</author><pubDate>Thu, 18 Feb 2010 05:24:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6228891560010696988.post-3792903776690392989</guid><description>&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;ตัวอย่างนี้แสดงวิธีการเบื้องต้น เพื่อแสดงวิธีการเข้าถึงข้อมูลแต่ละ pixel ของภาพ เพื่อทำการตัดสีตามค่าช่วงสีที่กำหนดไว้&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Tahoma; font-size: medium; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;blockquote&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;/blockquote&gt;&lt;blockquote&gt;using namespace std;&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;#include &lt;cv.h&gt;&lt;/cv.h&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#include &lt;cxcore.h&gt;&lt;/cxcore.h&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#include &lt;highgui.h&gt;&lt;/highgui.h&gt;&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;#define CAMERA_ID 0&lt;/blockquote&gt;&lt;blockquote&gt;#define ORG_IMAGE_DISPLAY  "original image"&lt;/blockquote&gt;&lt;blockquote&gt;#define PROCESSED_IMAGE_DISPLAY "processed image"&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;// interested color value&lt;/blockquote&gt;&lt;blockquote&gt;#define RED_MIN  0&lt;/blockquote&gt;&lt;blockquote&gt;#define RED_MAX 255&lt;/blockquote&gt;&lt;blockquote&gt;#define GREEN_MIN 0&lt;/blockquote&gt;&lt;blockquote&gt;#define GREEN_MAX 100&lt;/blockquote&gt;&lt;blockquote&gt;#define BLUE_MIN 0&lt;/blockquote&gt;&lt;blockquote&gt;#define BLUE_MAX 100&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;// channel indices&lt;/blockquote&gt;&lt;blockquote&gt;#define BLUE_CH  0&lt;/blockquote&gt;&lt;blockquote&gt;#define GREEN_CH 1&lt;/blockquote&gt;&lt;blockquote&gt;#define RED_CH  2&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;int main( int argc, char **argv )&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;    // create camera capture object.&lt;/blockquote&gt;&lt;blockquote&gt;    CvCapture *pCapture = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;    pCapture = cvCreateCameraCapture( CAMERA_ID );&lt;/blockquote&gt;&lt;blockquote&gt;    if ( pCapture == NULL )&lt;/blockquote&gt;&lt;blockquote&gt;        {&lt;/blockquote&gt;&lt;blockquote&gt;            cout &amp;lt;&amp;lt; "ERROR: Failed to open camera" &amp;lt;&amp;lt; endl;&lt;/blockquote&gt;&lt;blockquote&gt;            return EXIT_FAILURE;&lt;/blockquote&gt;&lt;blockquote&gt;        }&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;    // create windows for displaying the captured image&lt;/blockquote&gt;&lt;blockquote&gt;    // and the captured image.&lt;/blockquote&gt;&lt;blockquote&gt;    cvNamedWindow( ORG_IMAGE_DISPLAY );&lt;/blockquote&gt;&lt;blockquote&gt;    cvNamedWindow( PROCESSED_IMAGE_DISPLAY );&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;    // capture, process, and display&lt;/blockquote&gt;&lt;blockquote&gt;    // until user hit any key of the keyboard&lt;/blockquote&gt;&lt;blockquote&gt;    IplImage *pOrgImage = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;    IplImage *pProcessedImage = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;    do&lt;/blockquote&gt;&lt;blockquote&gt;    {&lt;/blockquote&gt;&lt;blockquote&gt;        // release old image&lt;/blockquote&gt;&lt;blockquote&gt;        // before creating a new one&lt;/blockquote&gt;&lt;blockquote&gt;        if ( pProcessedImage != NULL )&lt;/blockquote&gt;&lt;blockquote&gt;            {&lt;/blockquote&gt;&lt;blockquote&gt;                cvReleaseImage( &amp;amp;pProcessedImage );&lt;/blockquote&gt;&lt;blockquote&gt;                pProcessedImage = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;            }&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;        // capture new image&lt;/blockquote&gt;&lt;blockquote&gt;        pOrgImage = cvQueryFrame( pCapture );&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;        // create image which has the same width, height, depth, and number of channels&lt;/blockquote&gt;&lt;blockquote&gt;        // as the original image for put the result of processing.&lt;/blockquote&gt;&lt;blockquote&gt;        // Then fill the created image with 0 value ( black image ).&lt;/blockquote&gt;&lt;blockquote&gt;        pProcessedImage = cvCreateImage( cvSize( pOrgImage-&amp;gt;width, pOrgImage-&amp;gt;height ),&lt;/blockquote&gt;&lt;blockquote&gt;                    pOrgImage-&amp;gt;depth, pOrgImage-&amp;gt;nChannels );&lt;/blockquote&gt;&lt;blockquote&gt;        cvSetZero( pProcessedImage );&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;        // threshold the image by accessing all pixels of the image&lt;/blockquote&gt;&lt;blockquote&gt;        for ( int y = 0; y &amp;lt; pOrgImage-&amp;gt;height; y++ )&lt;/blockquote&gt;&lt;blockquote&gt;        {&lt;/blockquote&gt;&lt;blockquote&gt;            for ( int x = 0; x &amp;lt; pOrgImage-&amp;gt;width; x++ )&lt;/blockquote&gt;&lt;blockquote&gt;            {&lt;/blockquote&gt;&lt;blockquote&gt;                int offset_x = x*pOrgImage-&amp;gt;nChannels;&lt;/blockquote&gt;&lt;blockquote&gt;                int offset_y = y*pOrgImage-&amp;gt;widthStep;&lt;/blockquote&gt;&lt;blockquote&gt;                unsigned char *pPixel = (unsigned char*)pOrgImage-&amp;gt;imageData + (offset_x + offset_y);&lt;/blockquote&gt;&lt;blockquote&gt;                unsigned char *pDstPixel = (unsigned char*)pProcessedImage-&amp;gt;imageData + (offset_x + offset_y);&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;                if ( ( pPixel[BLUE_CH] &amp;gt;= BLUE_MIN &amp;amp;&amp;amp; pPixel[BLUE_CH] &amp;lt;= BLUE_MAX )&lt;/blockquote&gt;&lt;blockquote&gt;                        &amp;amp;&amp;amp; ( pPixel[GREEN_CH] &amp;gt;= GREEN_MIN &amp;amp;&amp;amp; pPixel[GREEN_CH] &amp;lt;= GREEN_MAX )&lt;/blockquote&gt;&lt;blockquote&gt;                        &amp;amp;&amp;amp; ( pPixel[RED_CH] &amp;gt;= RED_MIN &amp;amp;&amp;amp; pPixel[RED_CH] &amp;lt;= RED_MAX ) )&lt;/blockquote&gt;&lt;blockquote&gt;                    {&lt;/blockquote&gt;&lt;blockquote&gt;                        pDstPixel[RED_CH] = pDstPixel[GREEN_CH] = pDstPixel[BLUE_CH] = 255;&lt;/blockquote&gt;&lt;blockquote&gt;                    }&lt;/blockquote&gt;&lt;blockquote&gt;            }&lt;/blockquote&gt;&lt;blockquote&gt;        }&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;        // display images&lt;/blockquote&gt;&lt;blockquote&gt;        cvShowImage( ORG_IMAGE_DISPLAY, pOrgImage );&lt;/blockquote&gt;&lt;blockquote&gt;        cvShowImage( PROCESSED_IMAGE_DISPLAY, pProcessedImage );&lt;/blockquote&gt;&lt;blockquote&gt;    } while ( cvWaitKey( 1 ) == -1 );&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;    // release old image&lt;/blockquote&gt;&lt;blockquote&gt;    if ( pProcessedImage != NULL )&lt;/blockquote&gt;&lt;blockquote&gt;        {&lt;/blockquote&gt;&lt;blockquote&gt;            cvReleaseImage( &amp;amp;pProcessedImage );&lt;/blockquote&gt;&lt;blockquote&gt;            pProcessedImage = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;        }&lt;/blockquote&gt;&lt;blockquote&gt;
&lt;/blockquote&gt;&lt;blockquote&gt;    // before exiting the program,&lt;/blockquote&gt;&lt;blockquote&gt;    // destroy the display windows and&lt;/blockquote&gt;&lt;blockquote&gt;    // release the cameara capture object.&lt;/blockquote&gt;&lt;blockquote&gt;    cvDestroyWindow( ORG_IMAGE_DISPLAY );&lt;/blockquote&gt;&lt;blockquote&gt;    cvDestroyWindow( PROCESSED_IMAGE_DISPLAY );&lt;/blockquote&gt;&lt;blockquote&gt;    cvReleaseCapture( &amp;amp;pCapture );&lt;/blockquote&gt;&lt;blockquote&gt;    return 0;&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;/pre&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>ตัวอย่างการติดต่อกับกล้อง</title><link>http://imageopencv.blogspot.com/2010/02/blog-post.html</link><category>Image processing</category><category>Sample code Opencv</category><author>noreply@blogger.com (Undermine)</author><pubDate>Thu, 18 Feb 2010 05:22:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6228891560010696988.post-7967835339015477648</guid><description>&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;การติดต่อกับกล้องโดย OpenCV นั้นจะใช้ชุดคำสั่งจาก highgui ซึ่งมีตัวอย่างดังนี้&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #333333; font-family: verdana, arial, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="color: black; font-family: Tahoma; font-size: medium; line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre&gt;&lt;blockquote&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;/blockquote&gt;&lt;blockquote&gt;using namespace std;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#include &lt;cxcore.h&gt;&lt;/cxcore.h&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#include &lt;highgui.h&gt;&lt;/highgui.h&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;#define CAMERA_ID 0&lt;/blockquote&gt;&lt;blockquote&gt;#define DISPLAY_WINDOW_NAME "captured image"&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;int main( int argc, char **argv )&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;// create camera capture object.&lt;/blockquote&gt;&lt;blockquote&gt;CvCapture *pCapture = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;pCapture = cvCreateCameraCapture( CAMERA_ID );&lt;/blockquote&gt;&lt;blockquote&gt;if ( pCapture == NULL )&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;cout &amp;lt;&amp;lt; "ERROR: Failed to open camera" &amp;lt;&amp;lt; endl;&lt;/blockquote&gt;&lt;blockquote&gt;return EXIT_FAILURE;&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;// create window for displaying captured image.&lt;/blockquote&gt;&lt;blockquote&gt;cvNamedWindow( DISPLAY_WINDOW_NAME );&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;// capture and display&lt;/blockquote&gt;&lt;blockquote&gt;// until user hit any key of the keyboard&lt;/blockquote&gt;&lt;blockquote&gt;IplImage *pImage = NULL;&lt;/blockquote&gt;&lt;blockquote&gt;do&lt;/blockquote&gt;&lt;blockquote&gt;{&lt;/blockquote&gt;&lt;blockquote&gt;pImage = cvQueryFrame( pCapture );&lt;/blockquote&gt;&lt;blockquote&gt;cvShowImage( DISPLAY_WINDOW_NAME, pImage );&lt;/blockquote&gt;&lt;blockquote&gt;} while ( cvWaitKey( 1 ) == -1 );&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;// before exiting the program,&lt;/blockquote&gt;&lt;blockquote&gt;// destroy the display window and&lt;/blockquote&gt;&lt;blockquote&gt;// release the cameara capture object.&lt;/blockquote&gt;&lt;blockquote&gt;cvDestroyWindow( DISPLAY_WINDOW_NAME );&lt;/blockquote&gt;&lt;blockquote&gt;cvReleaseCapture( &amp;amp;pCapture );&lt;/blockquote&gt;&lt;blockquote&gt;return 0;&lt;/blockquote&gt;&lt;blockquote&gt;}&lt;/blockquote&gt;&lt;/pre&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>ข้อดีของ opencv และ จะเขียนได้อย่างไร</title><link>http://imageopencv.blogspot.com/2010/02/opencv_11.html</link><category>Image processing</category><category>Linux</category><category>OpenCV</category><category>Ubuntu</category><author>noreply@blogger.com (Undermine)</author><pubDate>Thu, 11 Feb 2010 18:55:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6228891560010696988.post-9133295003933193449</guid><description>&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=op0c-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0122060938&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;ข้อดีของ Opencv&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #111111; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="line-height: 3ex; margin-bottom: 2ex; margin-left: 0px; margin-right: 0px; margin-top: 2ex;"&gt;1. เป็น library ที่นำไปใช้ได้เลยครับ algorithm พวกพื้นฐานไม่ต้องมาคิดหรือโค้ดเอง ฟรีด้วยครับ&lt;br /&gt;
2. มี source code และ ตัวอย่างให้มาด้วย สามารถนำโค้ดที่มี ใน opencv ไปประยุกต์ใชได้&lt;br /&gt;
3. มี yahoo group เป็นที่รวมตัวของคนที่ใช้จากทั่วโลก&lt;br /&gt;
4. opencv ถูกพัฒนาจากทีม พัฒนาของ intel และ optimize code สำหรับ cpu 586 ของ intel&lt;br /&gt;
คิดว่า น่าจะ รุ่นที่มีพวก คำสั่งพิเศษขึ้นมานะครับ เช่น พวก mmx sse ทำให้เป็น library ที่มีความเร็วในการประมวล&lt;br /&gt;
ผลอยู่ในระดับต้นๆ เร็วกว่า ที่มีขายบางตัวด้วยครับ&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;จะเขียนอย่างไร&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #111111; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;1. ติดตั้งโปรแกรม visual studio ก่อน เพราะเราจะเขียนด้วย c++&lt;br /&gt;
2. หากล้องมาซักตัว (ไม่เอากล้องถ่ายรูปนะ) ลองเขียนโปรแกรมให้มันรับภาพจากกล้องเข้ามาให้ได้ ซึ่งปกติแล้วถ้ากล้องหรูๆ ก็จะมี library เฉพาะแถมมาให้ เพื่อรับภาพจากกล้องเข้ามาในโปรแกรม แต่ถ้ากล้องไม่หรู ก็ใช้ openCV รับภาพก็ได้ มันมี method สำเร็จรูปไว้รับภาพอยู่แล้ว&lt;br /&gt;
3. เมื่อรับภาพจากกล้องได้แล้ว สิ่งที่เราจะได้ก็คือ array ขนาดใหญ่โคตรๆ ขึ้นอยู่กับ จำนวน pixel ของภาพ เช่น ถ้ากล้องส่งภาพ 640x480 pixel ด้วยระบบ RGB มาให้ เราก็จะได้ array ขนาด 640x480x3 = 921600 ช่อง หลังจากนั้นเราก็จะเอา array นี้ไปผ่านกระบวนการ&lt;br /&gt;
4. ถ้าภาพที่ได้มันเบี้ยว เพราะเลนส์ distortion ก็ต้องแก้ไขด้วยการ calibrate ซึ่งตรงนี้เองที่เราต้องใช้ openCV เพราะมันมี method calibrate อยู่แล้ว&lt;br /&gt;
5. เอา array เมื่อกี๊ ไปวิเคราะห์หาตำแหน่งหัวหุ่นกับลูกบอล โดยการตรวจจับสีที่เราสนใจ(หรือที่เรียกว่า connected component) เช่น สีน้ำเงิน สีเหลือง สีส้ม ซึ่ง algorithm ที่ใช้ก็คือ breadth-first search หรือ depth-first search ก็ได้ เมื่อได้ตำแหน่งหุ่นกับลูกบอลแล้วก็เป็นอันเสร็จ จะเห็นได้ชัดว่าในกระบวนการที่ผ่านมา เราใช้ openCV แค่นิดหน่อย ที่เหลือก็คงต้องเขียนเอง&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>คำถามยอด ฮิต จะใช้ opencv ดีไหม</title><link>http://imageopencv.blogspot.com/2010/02/opencv.html</link><category>Image processing</category><category>Linux</category><category>OpenCV</category><category>Ubuntu</category><author>noreply@blogger.com (Undermine)</author><pubDate>Thu, 11 Feb 2010 18:52:00 -0800</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-6228891560010696988.post-3902202898813672774</guid><description>&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;Q จะเริ่มเล่น Image Processing ใช้ opencv ดีไหมครับ&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px; line-height: 21px;"&gt;A&amp;nbsp;คือคำว่า “เล่น image Processing” นี่หมายความกว้างแค่ไหนเหรอครับ&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #111111; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 12px;"&gt;&lt;div style="line-height: 3ex; margin-bottom: 2ex; margin-left: 0px; margin-right: 0px; margin-top: 2ex;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;ถ้าจะแค่ลองเปลี่ยนภาพสีเป็น gray scale หรือ จับก้อนสีที่เราสนใจ (connected component)อะไรแบบนี้ ก็ไม่จำเป็นต้องยึดติดกับ openCV หรอกครับ ภาษาทั่วๆไป อย่าง Java เองก็มี library ที่ช่วยในการจัดการกับไฟล์รูปภาพอยู่แล้ว เช่น แปลงไฟล์รูปภาพให้เป็น array ของค่า RGB ของแต่ละ pixel ซึ่งก็น่าจะสะดวกกว่า openCV นะครับ เพราะรู้สึกว่า openCV มันจะต้องใช้กับ C++ มั้ง ถ้าจำไม่ผิด ซึ่ง C++ นี่ก็เป็นภาษาที่ค่อนข้างน่าเหนื่อยใจพอสมควร&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 3ex; margin-bottom: 2ex; margin-left: 0px; margin-right: 0px; margin-top: 2ex;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;แต่ถ้าจะทำอะไรที่มันพิสดารกว่าเปลี่ยนรูปสีเป็น gray scale เช่น การแก้ไขความเบี้ยวของภาพที่เกิดจาก lens distortion อะไรงี้ ก็คงต้องใช้ openCV ล่ะครับ เพราะ openCV มี method สำเร็จรูปไว้จัดการกับเรื่องแบบนี้อยู่แล้ว ส่วน library ของ ภาษาอื่น ผมไม่แน่ใจว่ามันจะมี method เจ๋งๆเหมือน openCV รึเปล่า&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: 3ex; margin-bottom: 2ex; margin-left: 0px; margin-right: 0px; margin-top: 2ex;"&gt;&lt;span class="Apple-style-span" style="color: black;"&gt;สรุปก็คือ ถ้าจะทำอะไรที่ไม่พิสดารมาก ก็ไม่จำเป็นต้องใช้ openCV เพราะมันต้องเขียน C++ ซึ่งเปลืองพลังงานอย่างแรง ภาษาอื่นก็มี library ให้ใช้ แต่ถ้าจะทำอะไรหรูหรา ก็คงต้อง openCV&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/span&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item></channel></rss>