Color Detection part 2: ตรวจจับวัตถุสีเหลือง (yellow object detection)

          กลับมาอีกครั้งแล้วครับกับ lab9 วันนี้ผมจะนำเสนอ part2 ซึ่งเป็นเรื่อง การตรวจจับวัตถุสีเหลือง (yellow object detection) ภาพรวมของ part2 เราจะนำเสนอวิธีการตรวจจับวัตถุที่เป็นสีเหลือง และจะใช้ contour ในการหาตำแหน่งของวัตถุนั้นนะครับ ขั้นสุดท้ายเราจะตีกรอบรอบวัตถุที่โปรแกรมตรวจจับได้นะครับ

ขั้นแรก :  รับ input จากกล้องวีดีโอ และแปลงภาพ input จาก RGB เป็น HSV
cameraImage = capture.QueryFrame(); //input image
            Image<Hsv, Byte> hsvImage = cameraImage.Convert<Hsv,Byte>(); //Convert RGB > HSV. 


ขั้นที่สอง ใช้ cvInrange() ในการแยกวัตถุที่มีสีเหลืองออกจาก background และกำจัด noise ด้วย cvErode()
//Create result image.
Image<Gray, Byte> ResultImage = new Image<Gray, Byte>(hsvImage.Width, hsvImage.Height); 

 //Define low range(16).
Image<Gray, Byte> IlowCh0 = new Image<Gray, Byte>(hsvImage.Width, hsvImage.Height, new Gray(16));

//Define hight range(30).
 Image<Gray, Byte> IHiCh0 = new Image<Gray, Byte>(hsvImage.Width, hsvImage.Height, new Gray(30)); 

//Use cvinrange() method and hsvImage[0] = hsvimage channel 0
 CvInvoke.cvInRange(hsvImage[0], IlowCh0, IHiCh0, ResultImage); 

CvInvoke.cvErode(ResultImage, ResultImage, (IntPtr)null, 2);  //Noise reduce.


 Image<Gray, Byte> imgForContour = new Image<Gray, byte>(ResultImage.Width, ResultImage.Height);

CvInvoke.cvCopy(ResultImage, imgForContour, System.IntPtr.Zero); //Copy image for contoure






ขั้นที่สาม: ใช้ contour ในการหาตำแหน่ง และตีกรอบให้กับ contours ขั้นตอนในการใช้ contour มี 3 ขั้นนะครับ จะได้ไม่สับสน
สาม จุด หนึ่ง : จองเมมและสร้างตัวแปร
IntPtr storage = CvInvoke.cvCreateMemStorage(0);
IntPtr contour = new IntPtr();

สาม จุด สอง: ใช้ cvfindContours(); ในการหา contours output จะถูกเก็บไว้ใน seq
CvInvoke.cvFindContours(imgForContour, storage, ref contour, System.Runtime.InteropServices.Marshal.SizeOf(typeof(MCvContour)), Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, new Point(0, 0));
Seq<Point> seq = new Seq<Point>(contour, null);


สาม จุด สาม :  loop เพื่อดูว่า มี contours ทั้งหมดกี่อัน และ get ค่าตำแหน่งของ contours นั้นมาด้วย

 for (; seq != null && seq.Ptr.ToInt32() != 0; seq = seq.HNext)
{
       // get ค่า X,Y width,Height ของ contours
       Rectangle bndRec = CvInvoke.cvBoundingRect(seq, 1); 

       // คำนวณหาพื้นที่ของ contours
double areaC = CvInvoke.cvContourArea(seq, MCvSlice.WholeSeq, 1) *-1; 
       
        if (areaC > 200) // หลีกเลี่ยง noise เล็กๆ โดยการดูขนาดของ contours
        {
               // วาดกรอบสี่เหลี่ยมให้กับวัตถุ
               CvInvoke.cvRectangle(cameraImage, new Point(bndRec.X, bndRec.Y), new Point(bndRec.X + bndRec.Width, bndRec.Y + bndRec.Height), new MCvScalar(0, 0, 255), 2, LINE_TYPE.CV_AA, 0);  
         
        }
}


Output





76 ความคิดเห็น

February 1, 2013 at 11:57 PM

ถ้าจะตรวจจับวัตถุ สีแดง เขียว น้ำเงิน ต้องเปลี่ยนอะไรตรงไหนบ้างครับ

Reply
February 2, 2013 at 1:44 AM

//Define low range(16).
Image IlowCh0 = new Image(hsvImage.Width, hsvImage.Height, new Gray(16));

//Define hight range(30).
Image IHiCh0 = new Image(hsvImage.Width, hsvImage.Height, new Gray(30));

เปลี่ยน low rang(16) กับ high rang(30) เป็นให้อยู่ใน rang สีแดง เขียว น้ำเงิน

สีแดงน่าจะอยู่ 0 -10 กว่าๆ มั้ง จำไม่ได้ ลองปรับดู
สีเขียว 60-80 น้ำเงิน 160 กว่ามั้ง ลองปรับๆ ดูครับ ดูค่าสีได้ใน paint ในส่วนของค่า HUE ครับ

Reply
February 2, 2013 at 10:30 AM

ขอบคุณครับ

Reply
February 2, 2013 at 10:36 AM

ถ้าจะให้มันอยู่ในโปรแกรมเดียวกันก็ใส่โค้ดส่วนนี้
/Define low range(16).
Image IlowCh0 = new Image(hsvImage.Width, hsvImage.Height, new Gray(16));

//Define hight range(30).
Image IHiCh0 = new Image(hsvImage.Width, hsvImage.Height, new Gray(30));

ไป3อันใช่มั้ยครับ

Reply
February 2, 2013 at 2:15 PM

ครับ

Reply
February 2, 2013 at 2:15 PM
This comment has been removed by the author.
Reply
February 4, 2013 at 8:40 AM

ถ้าจะให้มันส่งค่าผ่านพอร์ต RS-232 ไปบอร์ตไมโคร ว่าใช่ช่วงสีนี้รึเปล่า ต้องทำยังไงอ่าครับ

Reply
February 4, 2013 at 6:02 PM

ในโปรแกรมคุณสามารถตรวจว่า วัตถุอยู่ในช่วงสีนี้หรือเปล่าได้หรือยังครับ ถ้าทำได้แล้ว ต่อไปคุณก็เขียนโปรแกรมให้ติดต่อกับบอร์ดไมโครครับ ซึ่งในส่วนนี้ผมก็ไม่เคยเขียนเหมือนกันครับ ^_^

Reply
February 4, 2013 at 8:00 PM

โปแกรมจับสีได้ตามช่วงแล้วครับ มีวิธีว่าเมื่อเห็นวัตถุช่วงสีนี้แล้วให้เป็นตัวแปร a มั้ยครับ

Reply
February 4, 2013 at 9:22 PM

if (areaC > 200) // หลีกเลี่ยง noise เล็กๆ โดยการดูขนาดของ contours
{
// เจอวัตถุในช่วงที่กำหนด สร้างตัวแปร a ได้เลยครับ
}

Reply
Anonymous
February 13, 2013 at 10:57 AM

ถ้าจะให้นับพิกเซลของวัตถุในภาพจะทำได้มั๊ยครับบ

Reply
February 13, 2013 at 11:26 AM

@Pakapon ทำได้ครับ มีหลายวิธีด้วยครับ
วิธีแรก ภายในกรอบสีแดง ใช้ loop วนนับจำนวนจุดที่เป็นสีขาว
วิธีที่สอง ใช้ cvContourArea ในการหาพื้นที่ของวัตถุ ครับ
วิธีที่สาม ใช้ความกว้าง * ความสูง ของกรอบสีแดงแทนครับ (จำนวน pixel ที่ได้จะไม่เท่ากับ จำนวน pixel จริงของวัตถุ แต่วิธีนี้จะค่อนข้างง่าย และไม่ยุ่งยาก ) double area = bndRec.Width * bndRec.Heigh

ลองดูครับ ^_^

Reply
Anonymous
February 13, 2013 at 11:59 AM

ขอบคุนครับบ ^^

Reply
Anonymous
February 13, 2013 at 2:50 PM

มีหนังสือให้ศึกษารึป่าวครับ หรือว่าต้องคิดฟังก์ชั่นขึ้นมาเอง

Reply
February 17, 2013 at 4:54 AM

หนังสือมีแต่ภาษาอังกฤษครับ ภาษาไทยไม่เคยเจอนะ TT ลอง search ในกูเกิ้ลดูครับ

Reply
Anonymous
February 18, 2013 at 10:45 PM

พอจะมี keyword มั๊ยครับ

Reply
February 18, 2013 at 11:05 PM

ลองอ่านหนังสือ Opencv เล่มนี้ดูครับ
http://www.cse.iitk.ac.in/users/vision/dipakmj/papers/OReilly%20Learning%20OpenCV.pdf

http://www-2.dc.uba.ar/materias/visrob/data/downloads/otros/OpenCV_2_Computer_Vision_Application_Programming_Cookbook.pdf

ส่วนผมศึกษาวิธีใช้ไลบราลี่ใน emgucv ในเว็บนี้ครับ http://www.emgu.com/wiki/files/2.3.0/document/Index.html

ลองดูครับ ^_^

Reply
Anonymous
February 26, 2013 at 7:59 PM

ขอบคุนครับ

Reply
Anonymous
February 26, 2013 at 8:05 PM

ผมลองทำตามโค้ดนี้มันขึ้นว่า The name 'imgForContour' does not exist in the current context อะนะ จะแก้ยังไงดี

Reply
February 26, 2013 at 11:21 PM

@Pakapon Ponton ส่งโค๊ดมาทาง mail ผมทีครับ kengzer@gmail.com เดี๋ยวผมช่วยดูให้

Reply
March 26, 2013 at 11:50 PM

สาม จุด สอง: ใช้ cvfindContours(); ในการหา contours output จะถูกเก็บไว้ใน seq

CvInvoke.cvFindContours(imgForContour, storage, ref contour, .....)

ตัวแปร imgForContour มัน error อ่ะครับ ต้องประกาศก่อนรึว่ายังไง
แล้วถ้าต้องประกาศก่อน ประกาศแบบไหนครับ

Reply
March 27, 2013 at 6:21 PM

เพิ่ม code ตรงนี้เข้าไปใน 3.1 นะครับ
Image imgForContour = new Image(ResultImage.Width, ResultImage.Height);
CvInvoke.cvCopy(ResultImage, imgForContour, System.IntPtr.Zero);

Reply
March 30, 2013 at 9:48 AM

แล้วอย่างงี้โปรแกร ตรวจคนไม่ใส่หมวกกันน๊อก ใช้หลักการยังไงครับ

Reply
March 31, 2013 at 2:20 AM

@OF_sex อธิบายคงจะลำบากมากครับ เพราะงานมันค่อนข้างยาก และซับซ้อน แต่ถ้าอยากจะศึกษาจริงๆ ทิ้งเมล์ลไว้ครับ หรือ msg มาที่ facebook/labplays ผมจะส่ง paper ให้อ่านครับ

Reply
March 31, 2013 at 2:40 AM
This comment has been removed by a blog administrator.
Reply
March 31, 2013 at 2:44 AM

อยากศึกษา ครับ แต่ไม่มีคนสอน หนังสือก็ไม่รู้จะไปดูที่ไหร

Reply
March 31, 2013 at 3:01 AM

@OF_sex เรื่อง image processing (opencv , emgucv) มีเยอะแยะมากมายครับ แต่ถ้าเป็นภาษาไทย คงจะหาลำบากหน่อย ส่วนเรื่องการตรวจหมวกกันน็อค หาได้ยากมากครับ เพราะมีเพียงไม่มีคนที่ศึกษาเรื่องนี้ ส่วนมากจะเป็นคนแถบเอเซีย เช่น ไทย ฮ่องกง คนตะวันตก เขาไม่ได้ศึกษากันครับ บ้านเมืองเขาไม่มีปัญหาเรื่องหมวกกันน็อคอะครับ

Reply
March 31, 2013 at 4:18 PM
This comment has been removed by the author.
Reply
March 31, 2013 at 4:20 PM

อยากได้ เว็บ สำหรับคึกษาอืนๆ อีกพอจะแนะนำได้หรื่อไม่ครับ หรือ Road map ในการคึกษาเกียวกับ image processing อยากจะเขียนโปรแกรมที่เกียวกับ image processing ได้ รวมถึงเอาไปพลิกแพงใช้กับการเขียนโปรแกรมอืนๆครับ

Reply
March 31, 2013 at 4:22 PM

โปรแกรม ตรวจหมวกดูคนใส่หมวกกันน๊อก เป็นดปรเจ็คจบของ ม.น ป.ตรี หรือ โทครับ

Reply
March 31, 2013 at 4:50 PM

เว็บสำหรับศึกษา imageprocessing ลองค้นหาในกูเกิ้ลดูครับ มีเยอะแยะมากมาย คีย์เวิร์ดสำคัญ ก็พวก image processing , opencv , emgucv ต้องค่อยๆ อ่านและทำความเข้าใจครับ อย่าไปรีบร้อน
หนังสือที่แนะนำคือ Learning opencv http://www.cse.iitk.ac.in/users/vision/dipakmj/papers/OReilly%20Learning%20OpenCV.pdf

ก่อนคุณจะเขียนโปรแกรมทางด้าน image processing ได้คุณต้องเข้าใจก่อนว่า image คืออะไร โอเปอร์เรชั่นพื้นฐานมีอะไรบ้าง ซึ่งหาอ่านได้ตามอินเตอร์เน็ตทั่วไป หลังจากพอเข้าใจหลักการพื้นฐานแล้ว คุณก็ต้องเลือก tool มาสักตัว เพื่อที่จะใช้เขียนโปรแกรม(OpenCv , EmguCV , matlab) แล้วแต่ชอบ เลยครับ ถ้าเลือก emgucv ผมแนะนำให้ลองทำตาม และเรียนรู้ ในเว็บ labplays ตั้งแต่ lab1 เลยครับ
______________________
โปรแกรมตรวจจับหมวกกันน็อค เป็นโปรเจคจบ ของวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยนเรศวร ป.ตรี ครับ

Reply
March 31, 2013 at 5:05 PM

http://www.youtube.com/watch?feature=player_embedded&v=oNwVzun8k3I

เขียนมาถึง lab7 แล้ว ครับ แต่ก็มีบางช่วงที่ไม่เข้าใจ
(ขอบคุนสำหรับคำแนะนำครับ) เดียวขอกับไปดูตั้งพื้นฐานก่อน

Reply
March 31, 2013 at 5:13 PM

สุดยอดไปเลยครับ หอไอเฟลไม่ได้สร้างเสร็จภายในวันเดียวครับ ^_^

Reply
April 2, 2013 at 9:52 PM

มีคำถาม ครับ emgucv ที่ใช้ C# กับ opencv C++
ความไวของการใช้งานต่างกันไม่ครับ มีคนบบอก ว่า emgucv ที่ใช้ C# มันช้ามาก

(ไปติดต่อเรียน image processing คนที่จะสอนบอกว่า emgucv ที่ใช้ C# มันช้า เขาจะสอน C++ ให้ ไม่แน่ใจที่เขาพูดแบบนี้ เพราะว่าเขาไม่ถนัด C# หรือป่าาว )

ประเด็นคือว่า เป็น c# อยู่ งงปลาๆ ส่วน C++ ไม่เคยจับ เลยกลัวการเริ่มใหม่แล้วจา พากันงง ทั้ง c# c++

Reply
April 3, 2013 at 9:06 AM

c++ กับ c# ในเรื่องของความเร็ว ก็ต่างกันอยู่ครับ จะต่างกันมากหรือต่างกันน้อย ขึ้นอยู่กับโปรแกรมเมอร์ด้วยครับ เอาเข้าจริงๆ ถ้าโปรแกรมเมอร์เขียนโค๊ดไม่ดีอาจทำให้ c++ ช้ากว่า c# ก็เป็นได้ครับ แต่ถ้าตัดตัวแปรเรื่องโปรแกรมเมอร์ออก ความเร็วของ c++ อาจจะเร็วกว่า c# ครับ แต่ไม่มากจนเรามองเห็นด้วยตาเปล่า งาน image processing ที่ผมเคยทำ ผมก็ทำบน c# ซะส่วนใหญ่ ผมก็ไม่เห็นจะเจอปัญหาเรื่อง Real Time เลยครับ

Reply
April 3, 2013 at 1:04 PM
This comment has been removed by the author.
Reply
April 3, 2013 at 1:06 PM

มีการเปิดหลักสูตรติวเข้ม หรือป่าวครับ 55 ถ้ามีนี้สมัคคนแรกเลยถ้าสอนผ่าน team viewer ก็น่าจะ ok นะครับ

Reply
April 3, 2013 at 1:08 PM

ยังไม่มีหรอกครับ ผมก็พึ่งเริ่มสนใจ image processing ได้ไม่นานหรอกครับ ประสบการณ์ก็มีอยู่น้อยนิด ยังสอนใครไม่ได้หรอกครับ

Reply
April 8, 2013 at 8:50 PM

ถ้าหากมีวัตถุสีเดียวกันอยู่ในภาพมากกว่า 1 วัตถุ
เราต้องดูจากอะไรหรอครับถึงจะรู้ได้ว่า วัตถุไหนอยู่ก่อน วัตถุไหนอยู่หลัง
ตอนนี้ผมดูจาก แกน x เป็นหลัก เลยใช้ bndRec.X แต่มันรู้แค่ตำแหน่งของวัตถุเดียวอ่ะครับ อีกวัตถุ ไม่รู้จะหาจากไหนได้

Reply
April 8, 2013 at 8:52 PM

แบบในภาพตัวอย่างอ่ะครับ
จะรู้ได้ไงว่า กระดูก อยู่ใกล้ขอบซ้ายมากกว่า ฝาขวดน้ำ อ่ะครับ

Reply
April 11, 2013 at 12:16 PM

รอ อ่านบทความใหม่ๆ อยู่ นะ ครับ อิอิ

Reply
April 11, 2013 at 7:45 PM

ขอโทษนะครับ ที่ตอบช้า พอดีผมพึ่งทำงาน ชีวิตเลยวุ่นวายมากเลยครับ
@Famez ZyrenZe': ทำตามวิธีที่คุณใช้ก็ได้ครับ เมื่อคุณเจอวัตถุ คุณก็เก็บแค่พารามิเตอร์ x,y,width,height ลงในอาเรย์ หรือ list ก็ได้ครับ ทีนี้ก็แล้วแต่คุณว่าจะเรียงลำดับจากพารามิเตอร์ไหน แกน X หรือแกน Y กว้าง หรือ สูง แล้วแต่สะดวกเลยครับ ข้อสำคัญ เรียงลำดับดีๆ นะครับ

OF_sex: ผมจะพยายามอัพบทความใหม่ให้เร็วที่สุดครับ ^_^

Reply
April 18, 2013 at 11:42 PM

เออ ถ้าอย่างนี้ ตัว Qr code เราควรจะจับ สี ดำ หรือสีขาวดี ละครับ

Reply
April 19, 2013 at 12:30 PM

จะทำตัวอ่าน QR code หรอครับ ไอเดียแจ่มเลยครับ ผมก็ไม่เคยทำเหมือนกันครับ เท่าที่ได้ลองอ่านๆ เมื่อสักครู่ ค่อนข้างยากและซับซ้อนเหมือนกันครับ ขั้นแรกคุณต้องเข้าใจก่อนว่าหลักการมันทำงานอย่างไรครับ แล้วค่อยมาว่ากันเรื่องอัลกอลิทึมใน image processing ครับ ถ้าสนใจลองอ่านนี้ดูครับ

http://www.aishack.in/2012/02/scanning-qr-codes/
http://www.thonky.com/qr-code-tutorial/introduction/
http://raidenii.net/files/datasheets/misc/qr_code.pdf

Reply
April 22, 2013 at 1:47 AM

ตอนนี้ ที่ ทำๆ อยู่ คือ ทำ คือตัว http://www.youtube.com/watch?v=zkO70PjqYDg ใช้ Aforge.net ซึ้งกว่ามันจะอ่านได้ ช้ามาก

แลยกะ ว่า Emgu ตัดภาพให้มันเป็น สีขาวหรื่อไม่ก็ดำ มันจะได้ โพกัสที่ รูป qrcode น่าจะอ่านได้ไวกว่า

(จะลองเอาไปใช้คิดเงินแทนบาโค๊ต ใช้QR กับกล้องเว็บแคมแทน)

Reply
April 23, 2013 at 9:15 AM

ไอเดียดีมากครับ ถ้าจะโฟกัสเฉพาะที่ตัว QR Code ผมแนะนำลองดูเรื่อง shape detection ครับ ในส่วนของ rectangle ครับ เราจะสามารถรู้ตำแหน่งของ QR Code ได้เลยครับ

emgu: http://www.emgu.com/wiki/index.php/Shape_%28Triangle,_Rectangle,_Circle,_Line%29_Detection_in_CSharp

Aforge.net: http://www.aforgenet.com/articles/shape_checker/

Reply
April 25, 2013 at 2:56 PM

" ขั้นแรก : รับ input จากกล้องวีดีโอ และแปลงภาพ input จาก RGB เป็น HSV
cameraImage = capture.QueryFrame(); //input image
Image hsvImage = cameraImage.Convert(); //Convert RGB > HSV. "
--------------------------------------------------------------
ทำแล้วภาพที่ออกมามันยังเปนภาพเดิมไม่เปลี่ยนไปแบบที่พี่ทำไว้อะคับ
ทำไงดี

Reply
April 25, 2013 at 3:32 PM

ภาพที่ถูกแปลงมาเป็น HSV คุณให้แสดงผลที่ไหนครับ ใน pictureBox หรือเปล่าครับ ถ้าใช่ ผมแนะนำให้ลองเปลี่ยนมาใช้ CvInvoke.cvShowImage("Windows name",HSVimgage); แสดงภาพแทนครับ เพราะว่าภาพที่แสดงบน pictureBox มันจะถูกแปลงกลับมาเป็นโหมด bitmap ครับ ภาพมันก็เลยเหมือนเดิม

Reply
April 26, 2013 at 12:15 PM

ขอบคุณครับ ^ ^

Reply
April 28, 2013 at 3:07 PM

อยากทราบว่า เราจะ save ภาพที่เราได้จากส่วน output เป็น jpg ต้องใช้คำสั่งอะไรคับหมายถึงภาพที่ได้จาก CvInvoke.cvShowImage("Windows name",HSVimgage);
--------------------------------------------------------------------------------

Reply
April 28, 2013 at 5:15 PM

HSVimage.Save(@"path/filename.jpg") ครับ

Reply
April 28, 2013 at 9:46 PM

ขอบคุณครับ

Reply
May 2, 2013 at 3:03 PM

ไม่ทราบว่าเราสามารถนับจำนวนกรอบที่ตีเช่น กรอบแรก เก็บค่า x1 y1 width1 height1 กรอบสองเก็บ x2 y2 width2 height2 จะได้เป็นสองกรอบใช่มั๊ยครับ

คือสิ่งที่ผมจะทำคือ capture ภาพในแต่ละกรอบมาเก็บใน DB อ่าครับ ต้องทำอย่างไรครับ

Reply
May 2, 2013 at 3:51 PM

int count = 0; // นับจำนวนกรอง
for (; seq != null && seq.Ptr.ToInt32() != 0; seq = seq.HNext)
{
// get ค่า X,Y width,Height ของ contours
// คำนวณหาพื้นที่ของ contours
if (areaC > 200)
{
count++
// วาดกรอบสี่เหลี่ยมให้กับวัตถุ
}
}

ลองดูครับ ไม่แน่ใจว่า ตรงตามที่คุณต้องการหรือเปล่า

Reply
May 2, 2013 at 6:45 PM

ที่ผมทำตอนนี้คือ หาวัตถุได้หลายอันแล้ว แล้วนับจำนวนได้

คืออยากถามอีกซักนิดนะครับ คือ ผมจะมีวิธีดึง ข้อมูลพวก X,Y width,Height ของ contours มาใส่ใน array อย่างไร คือวัตถุที่เจอมีหลายชิ้นน่ะครับ จึงต้องใข้ อาเรย์ช่วย เช่น

วัตถุแรก >>
object[ลำดับวัตถุ][ข้อมูลพวก X,Y width,Height ของ contours]

ผมอยากทราบว่าต้องประกาศ objectเป็นตัวแปรชนิดใดและใส่ตรงไหนน่ะครับ ขอบคุณมากครับ

Reply
May 2, 2013 at 11:24 PM

อ่าตอนนี้ผมลองทำดูได้แล้วครับ ขอบคุณมาก วันหลังมาถามใหม่ ^^

Reply
May 3, 2013 at 8:59 AM

เยี่ยมไปไเลยครับ ดีแล้วคครับ ที่สามารถแก้ปัญหาได้ด้วยตัวเอง เพราะมันจะส่งผลดีกับตัวคุณเองในอนาคตครับ

Reply
May 9, 2013 at 4:50 PM

ขอไฟล์มาศึกษาได้ไหมคับพี่
ผมทำเเล้วรัน ตีกรอบไม่ได้อะคับ

Reply
May 9, 2013 at 5:22 PM

เรื่องไฟล์จริงๆ ผมไม่ได้หวงอะไรหรอกครับ แต่ถ้าเกิดผมเอาลิ้งมาให้ดาวน์โหลดกัน ทุกคนที่เข้ามาก็จะโหลดแล้วก็เอาไปรัน โดยที่ไม่ได้ใส่ใจรายละเอียดในส่วนของตัวโค๊ดกันครับ ผมเลยไม่เอามาให้โหลดดีกว่า เพราะเราจะได้ลงมือทำเอง ได้เจอปัญหาเอง และจะได้แก้ไขปัญหาเองครับ ถ้าเกิดปัญหาอะไรก็ลองหาทางแก้ไขด้วยตัวเองดูก่อน ถ้าไม่ไหวจริงๆ แล้วค่อยไปหาที่ปรึกษาดีกว่าครับ ค่อยๆทำ ใจเย็นๆ เดี๋ยวก็โหดเองครับ ^^

Reply
May 9, 2013 at 5:34 PM

คับผม

Reply
May 28, 2013 at 7:09 PM

หลักการ opencv กับ emgu นี้้เหมือนกันใช่ไหมครับ ต่างกันที่หลักของภาษาหรือเปล่า ผมหมายถึง c++ c# ครับ

Reply
May 28, 2013 at 7:14 PM

เข้าใจถูกแล้วครับ

Reply
July 12, 2013 at 8:33 AM

สวัสดีครับ ตามโปรแกรมจับวัตถุที่เหลืองสองชิ้นที่ตีกรอบสองกรอบ ถ้าผมต้องการที่จะดึงพิกัดกึ่งกลางของทั้งสองกรอบ ออกมาเป็นจุดมาจะต้องเขียนโปรแกรมยังไงอ่ะครับ จะแยกได้ไหมว่าเราจะให้กรอบไหนเป็นกรอบหนึ่งหรือสอง แล้วถ้าจะจับวัตถุสี่กรอบสามารถทำได้ไหมครับ

Reply
July 12, 2013 at 7:44 PM

"ต้องการที่จะดึงพิกัดกึ่งกลางของทั้งสองกรอบ"
: แต่ละกรอบเราสามารถรู้ ตำแหน่ง X,Y ด้านบนซ้าย ความกว้าง ความสูง แล้วหนิครับ สามารถนำมาคำนวณหาตำแหน่งกึ่งกลางของกรอบได้เลย

"จะแยกได้ไหมว่าเราจะให้กรอบไหนเป็นกรอบหนึ่งหรือสอง"
: แยกได้ครับ

"จะจับวัตถุสี่กรอบสามารถทำได้ไหมครับ"
: ได้ครับ

Reply
August 22, 2013 at 4:16 PM

อยากได้ความสูง กับความกว้าง เอามาแสดง ไม่ทราบว่าต้องทำไงคับ

Reply
August 22, 2013 at 4:27 PM

จากหัวข้อ 3.2 ครับ เราสามารถรู้ coordinate ของ rectangle ของวัตถุได้ครับ bndRec.X bndRec.Y bndRec.Width bndRec.Height ครับ จากนั้นคุณก็เอาค่าดังกล่าวไปแสดงได้เลยครับ

Reply
August 22, 2013 at 7:35 PM

ขอบคุณคร้าบ มีอีกอย่างนึง

คือผมอยากจะเอา รูปภาพมา ทำแทนการจับภาพจากกล้อง พอจะมีคำแนะนำบ้างมั้ยครับ

คือผมจะ ตีกรอบรูปร่างที่ต้องการ ประมานนี้แหละ แต่จะทำจากเครื่องสแกน

แต่จะเริ่มจากรูปภาพก่อน

Reply
August 22, 2013 at 8:40 PM

แล้ว input จาก webcam กับ input จากรูป มันต่างกันตรงไหนล่ะครับ? มันก็เหมือนกันหนิครับ คุณเข้าใจคำว่า video หรือเปล่าครับ video คือ เฟรมรูปหลายๆเฟรมเอามาเรียงต่อกัน ดังนั้นถ้าคุณทำกับ video ได้ คุณก็ทำกับ รูปภาพเดี่ยวๆ ได้ครับ

Reply
August 22, 2013 at 8:42 PM

เข้าใจแต่กำลังหาทางดึงจากรูปคับ พอดีไม่ได้เรียนมาทางนี้ ก้เลยไม่ค่อยรู้คำสั่งคับ

Reply
August 23, 2013 at 1:32 PM

ลองดู lab 2 ครับ ใน code ของขั้นตอนที่ 8

Reply
September 6, 2013 at 12:02 PM

ของผม detect ตามรูป อะครับ ถ้าต้องการรูพิกัดของรูปที่เปนสีเหลืองผมต้องทำยังไงครับ

Reply
Anonymous
October 10, 2013 at 3:42 PM

ถ้าจะ Detect แล้วจะให้กรอบสี่เหลี่ยมขึ้นค้างเอาไว้ ต้องทำอย่างไรหรอครับ

Reply
October 15, 2013 at 6:04 PM

ขอสอบถามหน่อยครับ ตรง cvFindContours ถ้าเรารับภาพมาเปน .jpg นะครับ เราจะต้องเลี่ยนครงนี้ใช่ไหมครับ CvInvoke.cvFindContours(imgForContour, storage, ref contour, System.Runtime.InteropServices.Marshal.SizeOf(typeof(MCvContour)), Emgu.CV.CvEnum.RETR_TYPE.CV_RETR_EXTERNAL, Emgu.CV.CvEnum.CHAIN_APPROX_METHOD.CV_CHAIN_APPROX_NONE, new Point(0, 0)); แล้วถ้าเปลี่ยนต้องเปลี่ยนที่เป็น Runtime ใช่ไหมครับ เปลี่ยนเป็นยังไงครับ ขอบคุณครับ

Reply
October 16, 2013 at 1:21 PM

ขอโทษที่ตอบช้านะครับ พอดีช่วงนี้ผมยุ่งๆ อะครับ
@thongchai.jindatam เราสามารถรู้ตำแหน่งพิกัดของวัตถุที่เรา detected เจอ จากตัวแปร Rectangle bndRec ครับ โดย bndRec จะเก็บค่า X , Y ,Width , Height ครับ

@Anonymous กรอบสี่เหลี่ยมเกิดจากอะไรครับ มันเกิดจากเราเจอวัตถุที่ต้องการ detect ไม่ใช่หรอครับ ถ้าเจอให้วาดกรอบสี่เหลี่ยม ถ้าไม่เจอก็ไม่ต้องวาด แต่ถ้าไม่เจอแล้วคุณต้องการให้วาด คุณก็สั่งให้มันวาดสิครับ


Reply
October 16, 2013 at 1:28 PM

@asashi ทำความเข้าใจเรื่อง cvFindContours ใหม่นะครับ cvFindContours เป็น Method ที่ใช้หา contours จากภาพ binary โดยมี parameter ดังนี้
cvFindContours(IntPtr image, IntPtr storage, ref IntPtr firstContour, int headerSize, RETR_TYPE mode, CHAIN_APPROX_METHOD method, Point offset)

จุดสำคัญอยู่ที่ IntPtr image ครับ มันคือภาพอินพุทแบบ binary ที่เราต้องการหา contours ครับ
ผมแนะนำให้คุณลองศึกษาความต่างระหว่าง วีดีโอกับภาพธรรมดา แล้วคุณจะเข้าใจครับ ^^

Reply
September 7, 2015 at 10:48 PM

Vasanครับมีลาย เฟชไหมครับ ผมขอหน่อยนะครับพี่

Reply

Post a Comment

Templated by Blogger Items