Content on this page requires a newer version of Adobe Flash Player.

Get Adobe Flash player

Home | Forum| Tutorials|School|R&D|Contact|About
 OpenCV_MFC_Project01
(การแสดงผลภาพบน Picture Control)

Image Processing (OpenCV + MFC Application)
ตอนที่ 01:
การใช้งาน SDW_Image และการแสดงผลภาพบน Picture Control

เว้นช่วงมานาน กับบทความเรื่อง OpenCV under MFC Application หรือ GUI Application อย่างที่ทราบว่า OpenCV มีฟังก์ชั่นสำหรับการแสดงผลเป็นของตัวเอง และมีฟังก์ชั่นรองรับการทำงานแบบ UI (User Interface) อยู่แล้ว เรียกได้ว่าพร้อมใช้งาน แต่หลายๆ Application ที่ถูกพัฒนาขึ้นในรูปของ GUI Application ไม่ว่าจะเป็นการพัฒนาด้วย Visual C++ หรือ C++ Builder หรือ IDE ตัวอื่นๆ ที่มีความสามารถด้าน GUI อยู่แล้ว โปรแกรมเมอร์อาจจะไม่ต้องการความสามารถทางด้าน GUI ของ OpenCV อันเนื่องมาจากการสร้าง GUI ด้วยความสามารถของ IDE จะสะดวก ง่าย ยืดหยุ่น และรวดเร็วกว่าเป็นต้น

อย่างในก็ตามการใช้งาน OpenCV นิยมพัฒนาขึ้นภายใต้ Application ที่เรียกว่า Console Application หรือรันภายใต้ DOS Mode นั่นเอง เพราะในงานที่ต้องการทราบผลของการทำงานด้าน Algorithm ทางด้าน Image Processing and Computer Vision ของ OpenCV ไม่จำเป็นต้องสร้าง GUI Application เพราะอาจไม่จำเป็นหรือเป็นการเสียเวลาโดยไม่มีความจำเป็น เนื่องจาก OpenCV มีความสามารถในการแสดงผลได้เพียงแค่ใช้คำสั่ง(ฟังก์ชั่น) เดียวนั่นคือ cvShowImage

แบบไหนดีกว่าระหว่าง GUI Application กับ Console Application?

คำถามนี้ตอบยากครับ ขึ้นกับจุดประสงของโปรแกรมเมอร์ และโปรแกรมที่ต้องการพัฒนา ในที่นี้ขอยกเป็นกรณีตัวอย่าง 2 กรณีดังนี้ครับ

  • แบบ Colsole Application ดีกว่า ถ้าต้องการใช้เพื่อต้องการพิสูจน์หรือทดลองงานต่างๆในระดับงานวิจัย หรือการทดลองเพื่อดูผลที่เกิดขึ้นจากกระบวนการของระบบหรือ Algorithm ต่างๆ แต่อาจไม่สะดวกถ้าโปรแกรมที่พัฒนาอยู่ต้องมีการแก้ไขตัวแปรหรือพารามิเตอร์หลายๆตัว เพราะอาจจะต้องเข้าไปแก้ในระดับ Source code นั่นก็หมายความว่า Colsole Application เหมาะสำหรับงานที่อยู่ในช่วงพัฒนามากกว่า Colsole Application ทั่วๆไปมีลักษณะดังรูปด่านล่าง แต่อย่างไรก็ตามสามารถเพิ่มส่วนติดต่อกับผู้ใช้ (UI) เช่นแถบเลื่อน (ScrollBar) และอื่นๆลงไปได้เช่นกัน แต่อาจจะมีความยุ่งยากเล็กน้อย

 

  • แบบ GUI Application ดีกว่า ถ้าต้องการพัฒนา Application ที่ต้องมีการปรับเปลี่ยนพารามิเตอร์หลายๆตัว และต้องการดูผลที่เกิดขึ้นในขณะที่โปรแกรมกำลังทำงานอยู่ (ไม่ต้องแก้ Scurce code และรันใหม่) นอกจากนี้โปรแกรมแบบ GUI ยังเหมาะกับการพัฒนาโปรแกรมเพื่อให้บุคคลทั่วไปที่ไม่มีความรู้ในเรื่องการเขียนโปรแกรม สามารถใช้งานได้อย่างง่ายดาย รูปด้านล่างคือ GUI Application จะเห็นได้ว่าในแง่ของการใช้งาน GUI Application คือโปรแกรมที่ผู้ใช้คอมพิวเตอร์รู้จักกันเป็นอย่างดีนั่นเอง


เริ่มสร้าง GUI Application ด้วย Microsoft Visual C++ แบบ MFC Application

ความยากของผู้เริ่มต้นใช้งาน OpenCV ร่วมกับ MFC Applacation คือการนำภาพมาแสดงบนฟอร์มหรืออาจจะเป็นบน PictureBox (Picture Control) เนื่องจากรูปแบบของไฟล์ภาพที่กำหนดโดย OpenCV (Intel) เป็นแบบ IplImage และไม่สามาารถนำมาใช้กับ PictureBox ได้โดยตรง จึงจำเป็นต้องเปลี่ยนรูปแบบของ IplImage มาอยู่ในรูปแบบของ Bitmap ก่อนนำไปแสดงผลบน PictureBox ส่วนนี้เป็นเรื่องที่ค่อนข้างซับซ้อนสำหรับมือใหม่ แต่จำเป็นอย่างมากที่จะต้องศึกษาอย่างละเอียด ผมขอย้ำว่าจำเป็น ไม่เช่นนั้นแล้วคุณอาจจะเป็นได้แค่ผู้ที่รู้ แต่รู้ไม่จริง อันนี้คุณเลือกเองได้ครับว่าจะเป็นผู้รู้ หรือผู้รู้จริง

อย่างไรก็ตาม บทความนี้ไม่ได้มีจุดประสงค์ให้คุณรู้จริงหรือรู้ลึกอะไรมากนัก แต่มีจุดประสงค์เพียงแค่ให้คุณใช้ OpenCV ร่วมกับ Visual C++ เพื่อสร้าง Application แบบ GUI เท่านั้น บทความนี้ผมจึงได้สร้าง DLL (Dynamic Link Library) และห่อหุ้มไว้ด้วย Class แบบง่ายๆ เพื่อให้คุณได้นำเอาไปใช้งานได้แบบไม่ต้องใช้ความสามารถในการเขียนโปรแกรมมากนัก เพราะฉนั้นตอนนี้ให้คุณเปิดใจรับสิ่งที่ผมจะนำเสนอเป็นแค่เครื่องมือ คือรู้ว่ามั้นทำอะไรได้ คุณจะใช้งานมันอย่างไร โดยที่ยังไม่จำเป็นต้องรู้ว่าเครื่องมือตัวนี้สร้างมาได้อย่างไร (ความคิดส่วนตัวผม อยากให้คุณรู้พื้นฐานแบบเชิงลึก ก่อนอ่านบทความนี้ แต่นั่นอาจจะเป็นเรื่องที่ค่อนข้างยาก เอาเป็นว่าศึกษาให้เห็นก่อนว่ามันทำอะไรได้บ้าง แล้วค่อยตามไปศึกษาด้วยตัวคุณเองว่ามันทำได้อย่างไร)

เกริ่นนำเชิงบั่นทอนกำลังใจผู้อ่านไปแล้วพอหอมปากหอมคอ ตอนนี้มาเริ่มสร้าง MFC Application กันเลยดีกว่าครับ ผู้ที่ยังไม่ค่อยคุ้นเคยกับ Visual C++ 2008 ก็ค่อยๆทำตามไปทีละขั้นตอนครับ เริ่มกันเลย...


Step 01. เปิดโปรแกรม Visual C++ 2008 ขึ้นนมา จากนั้นทำการสร้าง Project ใหม่ โดยการคลิกที่ File -> New -> Project...


Step 02. เลือก Project types: เป็น MFC และ Template: เป็น MFC Application จากนั้นทำการกำหนดชื่อในช่อง Name: เป็น Project01 (หรือชื่ออื่น) และที่เซฟไฟล์ต่างๆในช่อง Location: เป็น D:\OpenCV_MFC_Projects (หรือ path อื่น) ตามรูป เสร็จเรียบร้อยแล้วคลิกปุ่ม OK


Step 03. คลิกปุ่ม Next เพื่อดำเนอนการต่อ


Step 04. คลิกเลือก Dialog based เพื่อทำการเลือกชนิดของ Application เป็นแบบ Dialog จากนั้นคลิกปุ่ม Finish ได้เลย


Step 05. เริ่มทำการออกแบบหน้าตาของ GUI เริ่มทำการเปิดหน้าต่าง Resource View โดยการกดปุ่ม Ctrl+Shift+E ที่คีย์บอร์ด หรืออาจจะคลิกที่ View -> Resource View ที่ Menubar ก็ได้เช่นกัน จากนั้นใหเดับเบิ้ลคลิกที่ IDD_PROJECT01_DIALOG เพื่อเปิด Form หรือ Dialog ซึ่งเป็นพื้นที่สำหรับออกแบบ GUI (โดยปรกติ Form นี้จะปรากฎขึ้นโดยอัตโนมัติ หลังกดปุ่ม Finish ใน Step 04)


Step 06. รูปร่างหน้าตาเริ่มต้นของ Dialog หรือ Form สำหรับสร้าง GUI


Step 07. จาก Step 06 ให้ทำการลบทุกอย่าง (Edit Control และ Button) ออกไปจาก Form ให้เหลือเฉพาะ Form ว่างๆ จากนั้นให้กดปุ่ม Ctrl+Alt+X ที่คีย์บอร์ด เพื่อเรียกหน้าต่าง Toolbox ขึ้นมา แล้วทำการคลิกที่ Button ลากไปวางบน Form ตามด้วยคลิกที่ Picture Control แล้วลากไปวางบน Form เช่นเดียวกัน


Step 08. ทำการปรับขนาด และตำแหน่งของ Button และ Picture Control ตามความต้องการ


Step 09. คลิกขวาที่ Button แล้วคลิกเลือกที่ Properties เพื่อเรียกหน้าต่าง Properties ของ Button จากนั้นให้เปลี่ยนข้อความในช่อง Caption เป็น Open (ข้อความที่แสดงบน Button) ตามรูป


Step 10. คลิกขวาที่ Picture Control แล้วคลิกเลือกที่ Properties เพื่อเรียกหน้าต่าง Properties ของ Picture Control จากนั้นให้คลิกในช่อง Border เพื่อเปลี่ยนจาก False เป็น True ตามรูป (ให้ Picture Control มีกรอบขึ้นมา)


Step 10. กดปุ่ม Ctrl+T บนคีย์บอร์ดเพื่อดูผลของ GUI ที่ได้ทำการออกแบบไว้


Step 11. อย่างที่กล่าวไว้ตอนต้นว่า ผมได้เตรียม DLL และ Class สำหรับการแสดงผล IplImage ของ OpenCV ให้สามารถแสดงผลบน PictureBox (Picture Control) ไว้ให้แล้ว เพราะฉนั้นให้ทำการดาวน์โหลดไฟล์ทั้ง 4 ไฟล์ (ตามรูป) มาเก็บไว้ในเครื่องคอมพิวเตอร์ของคุณก่อน สามารถโหลดได้ที่นี่ หรือคลิกที่รูปด้านล่าง


Step 12. ไฟล์ทั้ง 4 ไฟล์ที่ได้ทำการดาวน์โหลดมา จะต้องนำไปไว้ที่เดียวกับไฟล์ของโปรเจ็ค ในที่นีคือ D:\OpenCV_MFC_Projects\Project01 ซึ่งได้กำหนดไว้ใน Step 02.


Step 13. ตรวจสอบให้มั่นใจว่าไฟล์ทั้ง 4 ไฟล์ได้ถูกนำมาไว้ที่เดียวกันกับไฟล์ต่างๆของโปรเจ็ค และในกรณีที่คุณสร้างโปรเจ็คใหม่ คุณจะต้องนำไฟล์ทั้ง 4 ไฟล์นี้ไปไว้ที่เดียวกับไฟล์ของโปรเจ็คทุกครั้ง ไม่เช่นนั้นโปรแกรมจะไม่สามารถทำงานได้

มาถึงตรงนี้แล้ว Application แบบ GUI ของเราพร้อมจะทำงานแล้วครับ แต่ตอนนั้นรันไปก็ยังไม่เห็นอะไร นอกจาก Button กับ Picture Control ก่อนจะเขียนโปรแกรม ตอนนี้ให้คุณไปเตรียมไฟล์รูปมาสักรูปครับ เอาเป็นไฟลชนิด BMP หรือ JPG ก็ได้ครับ ขาดของรูปไม่ต้องใหญ่มากนะครับ สักประมาณ 320*240 อาจจะเล็กหรือใหญ่กว่าก็ไม่ผิดกฏแต่อย่างใดครับ สุดท้ายให้คุณนำไฟล์รูปนี้ไปไว้ที่ Drive C ของคอมพิวเตอร์ และถ้าให้สมบูรณ์ตามใจผม ให้เปลี่ยนชื่อไฟล์รูปดังกล่าวเป็น Image ครับ ในนั้นตอนต่อไป ผมจะอธิบายว่าคุณจะใช้ DLL และ Class ที่คุณได้ดาวโหลดมาแล้วได้อย่างไร รับรองได้เลยครับว่าง่ายมากๆ เริ่มกันเลยครับ


Step 14. ทำการเพิ่มไฟล์ .h เข้ามาในโปรเจ็ค โดยการคลิกที่แทป Solution Explorer หรือกดปุ่ม Ctrl+Alt+L จากนั้นทำการคลิกขวาที่ไอคอน Header Files -> Add -> Existing Item... ตามรูป


Step 15. ทำการคลิกเลือกไฟล์ SDW_DisplayImage_MFC_V1.h และ SDW_Image.h (กดปุ่ม Ctrl ค้างไว้) จากนั้นคลิกปุ่ม Add เพื่อทำการเพิ่มไฟล์ไปยังโปรเจ็ค


Step 16. ทำการเพิ่มไฟล์ .cpp เข้ามาในโปรเจ็ค โดยการคลิกที่แทป Solution Explorer หรือกดปุ่ม Ctrl+Alt+L จากนั้นทำการคลิกขวาที่ไอคอน Source Files -> Add -> Existing Item... ตามรูป


Step 17. ทำการคลิกเลือกไฟล์ SDW_Image.cpp จากนั้นคลิกปุ่ม Add เพื่อทำการเพิ่มไฟล์ไปยังโปรเจ็ค


Step 18. ตวจสอบให้มั่นใจว่าไฟล์ SDW_DisplayImage_MFC_V1.h, SDW_Image.h และ SDW_Image.cpp ถูกเพิ่มเข้ามายังโปรเจ็คเรียบร้อยแล้วจริง (ไฟล์์ SDW_DisplayImage_MFC_V1.h ไม่จำเป็นต้องเพิ่มเข้ามาในโปรเจ็คก็ได้ แต่เพื่อในง่ายต่อการเปิดเพื่อดูรายละเอียดของไฟล์ จึงแนะนำให้เพิ่มเข้ามาด้วย) ทดลองเปิดไฟล์เหล่านี้ขึ้นมาดู ว่าข้างในมีอะไรอยู่บ้าง โดยการดับเบิลคลิกที่ไอคอนหรือชื่อของไไล์แต่ละตัว


Step 19. กลับมาที่หน้าต่าง Resource View อีกครั้ง โดยการคลิกที่แทป Resource View หรือกดปุ่ม Ctrl+Shift+E จากนั้นให้ดับเบิลคลิกที่ IDD_PROJECT01_DIALOG และ ดับเบิลคลิกที่ปุ่ม Open ตามลำดับ


Step 20. เมื่อดับเบิลคลิกที่ปุ่ม Open จะเป็นการเปิดไฟล์ Project01Dlg.cpp ขึ้นมา และตัว Visual C++ จะทำการสร้างฟังก์ชั่นที่ชื่อว่า OnBnClickedButton1() ขึ้นมาให้เองโดยอัตโนมัติ พร้อมให้ทำการเขียนโปรแกรมที่ต้องการลงไปในตัวของฟังก์ชั่นนี้


Step 21. ให้ทำการเขียนโปรแกรมลงไปในฟังชั่นนี้ตามโปรแกรมด้านล่าง (แนะนำให้พิมพ์ด้วยตนเอง ฝึกไว้ครับ นี่คือการเรียน ไม่ใช่การลอก)

void CProject01Dlg::OnBnClickedButton1()

{

    // TODO: Add your control notification handler code here

    CStatic *pPic = (CStatic *)GetDlgItem(IDC_STATIC);

    C_SDW_Image sdwImage;

    sdwImage.DisplayInitial(pPic->GetSafeHwnd());

    sdwImage.DisplayFromFile("C:/Image.bmp");

}


Step 22. เลื่อนขึ้นไปด้านบนสุด จากนั้นทำการ include ไฟล์ SDW_Image.h ตามรูป


Step 23. ตอนนี้ขั้นตอนการเขียนโปรแกรมเสร็จแล้ว ให้ทำการ Build ไฟล์โดยการคลิกที่ Build -> Build Solution หรือกดปุ่ม F7


Step 24. ตรวจสอบให้มั่นใจทุกครั้งหลังการ Build ว่าไม่มีข้อผิดพลาดเกิดขึ้น นั่นคือจะต้องมีข้อความ 0 failed ถ้ามากกว่า 0 ให้ตรวจสอบและแก้ไขให้ถูกต้อง จากนั้นสั่ง Build อีกครั้ง


Step 25. ขั้นตอนที่รอคอยคือการสั่งรันโปรแกรมที่เราได้สร้างขึ้น โดยการคลิกที่ Debug -> Start Debugging ตามรูป



Step 26. และนี่คือผลที่ได้ (ห้องทำงานของผมเอง)


มาถึงตรงนี้ผมหวังว่าคุณรันโปรแกรมของคุณได้แล้ว มาดูกันว่า ไฟล์ .h และ .cpp ที่ผมให้คุณโหลดมาใช้ในโปรเจ็คนี้แต่ละไฟล์มีรายละเอียดอะไรบ้าง?

SDW_DisplayImage_MFC_V1.h

    1 // By Santi; www.shadowwares.com; 19 Feb, 2010

    2 // DO NOT Change!!

    3 #ifndef _SDW_DisplayIplImage_MFC_V1_H_

    4 #define _SDW_DisplayIplImage_MFC_V1_H_

    5 #include "stdio.h"

    6 #include "string.h"

    7 #include "cv.h"

    8 #include "highgui.h"

    9 

   10 #define SDW_IMAGE_VERSION "SDW_DisplayImage_MFC_V1.0"    // 19 Feb 2010

   11 #define SDW_IMAGE_DLLNAME "SDW_DisplayImage_MFC_V1.dll"  // 19 Feb 2010

   12 #define DLL extern "C" __declspec(dllexport)

   13 

   14 #endif

ไฟล์นี้จะมีการ include ไฟล์ต่างๆที่จำเป็นนั่นคือ stdio.h, string.h cv.h, highgui.h นอกจากนี้ยังมีการ define ค่าคงที่ SDW_IMAGE_VERSION และ SDW_IMAGE_DLLNAME เอาไว้ จุดประสงค์หลักของไฟล์นี้จะใช้ในขั้นตอนการสร้าง DLL และถูกใช้เป็นไฟล์ header หลักของไฟล์อื่นๆอีกด้วย


SDW_Image.h

    1 // By Santi; www.shadowwares.com; 19 Feb, 2010

    2 #ifndef _C_SDW_Image_H_

    3 #include "SDW_DisplayImage_MFC_V1.h"

    4 class C_SDW_Image

    5 {

    6 private:

    7     typedef int (__cdecl *SDW_DisplayIplImage)(IplImage *img, HANDLE hPixtureBox, char *version);

    8     typedef int (__cdecl *SDW_DisplayFromFile)(char *fname, HANDLE hPixtureBox, char *version);

    9     HANDLE hPictureBox;

   10     HINSTANCE hDLL;

   11     SDW_DisplayIplImage DisplayIplImageAddr;

   12     SDW_DisplayFromFile DisplayFromFileAddr;

   13 

   14 public:

   15     C_SDW_Image(){};

   16     C_SDW_Image(HANDLE hPixtureBox){DisplayInitial(hPixtureBox);}

   17     virtual ~C_SDW_Image(){FreeLibrary(hDLL);}

   18     int DisplayInitial(HANDLE hPicturebox);

   19     int DisplayIplImage(IplImage *ImageName);

   20     int DisplayFromFile(char *ImageName);

   21 };

   22 #endif



ไฟล์นี้เป็น header ของ class จะแยกอธิบายเป็นบรรทัดดังต่อไปนี้

  • บรรทัดที่ 7 และ 8 เป็นการประกาศรูปแบบของฟังก์ชั่น (pointer to function) ที่จะถูกเรียกใช้ ซึ่งฟังชั่นนี้จะอยู่ในไฟล์ DLL
  • บรรทัดที่ 9 และ 10 เป็นการประกาศตัวแปรสำหรับใช้ในการอ้างถึง PictureBox (Picture Control) และไฟล์ DLL ซึ่งถูกประกาศไว้เป็นชนิด HANDLE และ HINSTANCE (จริงแล้วคือ pointer to void; (void *)) ตามลำดับ
  • บรรทัดที่ 11 และ 12 เป็นการประกาศตัวแปรเพื่อใช้ในการอ้างถึงฟังก์ชั่น SDW_DisplayIplImage และ SDW_DisplayFromFile ซึ่งอยู่ในไฟล์ DLL
  • บรรทัดที่ 15 คือฟังก์ชั่น Default Constructor ของ Class
  • บรรทัดที่ 16 คือฟังก์ชั่น Constructor ของ Class ที่ต้องการพารามิเตอร์เป็น HANDLE ซึ่งก็คือ Handle ของ Picture Control นั่นเอง
  • บรรทัดที่ 17 คือฟังก์ชั่น Destructor ถูกกำหนดทำให้การคืนหน่วยความจำที่เกิดจากการเรียกใช้ไฟล DLL
  • บรรทัดที่ 18 คือฟังก์ชั่นที่ใช้กำหนดให้ class รู้ว่า Picture Control ตัวไหนที่ต้องการให้แสดงผล นั่นหมายความว่า object ของ class นี้สามารถเปลี่ยนการเข้าถึง Picture Control ได้โดยการเรียกใช้ฟังก์ชั่นนี้
  • บรรทัดที่ 19 คือฟังก์ชั่นที่ใช้ที่ใช้ในการแสดงผล ต้องการพารามิเตอร์ชนิด IplImage* นั่นคือจะต้องส่ง pointer to IplImage มาให้ฟังก์ชั่นนี้
  • บรรทัดที่ 20 คือฟังก์ชั่นที่ใช้ในการแสดงผลเช่นกัน แต่ฟังก์ชั่นนี้ต้องการชื่อของไฟล์ที่ถูกบันทึกไว้ในเครื่องคอมพิวเตอร์ และต้องการพารามิเตอร์เป็น pointer to char

SDW_Image.cpp

    1 // By Santi; www.shadowwares.com; 19 Feb, 2010

    2 #include "stdafx.h"

    3 #include "SDW_Image.h"

    4 int C_SDW_Image::DisplayInitial(HANDLE hPictureBox)

    5 {

    6     this->hPictureBox = hPictureBox;

    7     hDLL = LoadLibrary(_T(SDW_IMAGE_DLLNAME));

    8     if(hDLL == NULL){

    9         return(-1);    // Cannot load the library

   10     }

   11     DisplayIplImageAddr=(SDW_DisplayIplImage)GetProcAddress(hDLL,(LPCSTR)"SDW_DisplayIplImage");

   12     DisplayFromFileAddr=(SDW_DisplayFromFile)GetProcAddress(hDLL,(LPCSTR)"SDW_DisplayFromFile");

   13     if(DisplayIplImageAddr==NULL || DisplayFromFileAddr==NULL){

   14         return(-2);    // Cannot get process address of the library

   15     }

   16     return(0);    // Success

   17 }

   18 

   19 int C_SDW_Image::DisplayFromFile(char *ImageName)

   20 {

   21     return(DisplayFromFileAddr(ImageName, this->hPictureBox, SDW_IMAGE_VERSION));

   22 }

   23 

   24 int C_SDW_Image::DisplayIplImage(IplImage *iplimage)

   25 {

   26     return(DisplayIplImageAddr(iplimage, this->hPictureBox, SDW_IMAGE_VERSION));

   27 }


ไฟล์นี้เป็นรายละเอียดของโปรแกรม ซึ่งมีรายละเอียดของฟังก์ชั่น DisplayInitial(), DisplayFromFile() และ DisplayIplImage()

  • DisplayInitial() ทำหน้าที่ 2 อย่างคือ การกำหนด Picture Control ให้กับ class และทำการโหลด Library หรือฟังก์ชั่น DisplayFromFile() และ DisplayIplImage() มาใช้ใน class นั่นเอง ฟังก์ชั่นนี้จะ return 0 ถ้าการทำงานสมบูรณ์ return -1 หรือ -2 ถ้าการทำงานผิดพลาด
  • DisplayFromFile() ทำหน้าที่โหลดไฟล์ภาพมาแสดงผลบน Picture Control ฟังก์ชั่นนี้จะ return 0 ถ้าการทำงานสมบูรณ์ และจะ return -1 ถ้าการทำงานผิดพลาด
  • DisplayIplImage() ทำหน้าที่แสดงผลภาพที่อยู่ในรูปแบบของ IplImage บน Picture Control ฟังก์ชั่นนี้จะ return 0 ถ้าการทำงานสมบูรณ์ และจะ return -1 ถ้าการทำงานผิดพลาด

** งงใช่หรือไม่ครับ?
ไม่แปลกครับถ้าคุณไม่มีความรู้ความเข้าใจเรื่อง Dynamic Link Library และ C++ โดยเฉพาะเรื่อง class และ pointer แต่.... ถ้าคุณเข้าใจเรื่องพวกนี้ดีอยู่แล้ว แล้วยังงงอีก นั่นถือเป็นเรื่องที่แปลกครับ
ผมต้องขออภัยที่ไม่สามารถอธิบายทุกสิ่งทุกอย่างที่เกี่ยวข้องให้คุณได้ในที่นี้ เพราะจุดประสงค์ของบทความนี้ไม่ใช่พื้นฐานการเขียนโปรแกรม แต่เป็นเรื่องการใช้งาน OpenCV ใน MFC Application และเฉพาะเจาะจงไปที่ Visual C++ 2008
สิ่งที่ผมทำได้อย่างเดียวคือการสร้าง Library และ DLL รวมไปถึงฟังก์ชั่นต่างๆ ให้คุณได้เรียกใช้ได้อย่างง่ายและรวดเร็วเท่านั้น นั่นหมายความว่าถ้าคุณเป็นคนที่ไม่มีพื้นฐาน คุณต้องอ่านและศึกษาครับ

ขอบคุณที่ติดตามครับ
Santi; (Head of ShadowWares)
26 Jan; 2010

Home|Forum|Tutorials|School|R&D|Contact|About
 


Copyright © 2010 by ShadowWares
Last Update: June 2, 2010 12:05 PM