สารบัญ:
- ขั้นตอนที่ 1: แผนภาพวงจร
- ขั้นตอนที่ 2: รายการชิ้นส่วน
- ขั้นตอนที่ 3: ทฤษฎี
- ขั้นตอนที่ 4: บันทึกการออกแบบ
- ขั้นตอนที่ 5: Timing Waveforms
- ขั้นตอนที่ 6: ตัวจับเฟรม
- ขั้นตอนที่ 7: ซอฟต์แวร์
- ขั้นตอนที่ 8: การรับภาพสี
วีดีโอ: สร้างกล้องของคุณเอง: 8 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
คำแนะนำนี้จะอธิบายวิธีสร้างกล้องโมโนโครมโดยใช้เซ็นเซอร์รับภาพ Omnivision OV7670, ไมโครคอนโทรลเลอร์ Arduino, สายจัมเปอร์สองสามตัว และซอฟต์แวร์ Processing 3
นอกจากนี้ยังมีการนำเสนอซอฟต์แวร์ทดลองเพื่อให้ได้ภาพสี
กดปุ่ม "c" เพื่อถ่ายภาพขนาด 640*480 พิกเซล … กดปุ่ม "s" เพื่อบันทึกภาพลงในไฟล์ รูปภาพที่ต่อเนื่องกันจะมีหมายเลขตามลำดับ หากคุณต้องการสร้างภาพยนตร์เหลื่อมเวลาสั้นๆ
กล้องไม่เร็ว (การสแกนแต่ละครั้งใช้เวลา 6.4 วินาที) และเหมาะสำหรับใช้ในที่แสงคงที่เท่านั้น
ค่าใช้จ่าย ไม่รวม Arduino และ PC ของคุณ น้อยกว่ากาแฟหนึ่งถ้วย
รูปภาพ
ส่วนประกอบที่ไม่มีการเดินสายจัมเปอร์จะแสดงในรูปเปิด
ภาพที่สองเป็นภาพหน้าจอที่แสดงซอฟต์แวร์กล้อง Arduino และตัวจับเฟรมสำหรับการประมวลผล 3 สิ่งที่ใส่เข้าไปแสดงให้เห็นว่ากล้องเชื่อมต่ออย่างไร
วิดีโอสาธิตการทำงานของกล้อง เมื่อกดปุ่มจับภาพ "c" จะมีแฟลชชั่วครู่ตามด้วยกิจกรรมต่อเนื่องขณะสแกนภาพ รูปภาพจะปรากฏในหน้าต่างแสดงผลโดยอัตโนมัติเมื่อการสแกนเสร็จสิ้น รูปภาพจะปรากฏในโฟลเดอร์การประมวลผลหลังจากกดปุ่ม "s" แต่ละครั้ง วิดีโอจบลงด้วยการวนอย่างรวดเร็วผ่านแต่ละภาพที่บันทึกไว้ทั้งสามภาพ
ขั้นตอนที่ 1: แผนภาพวงจร
แผนภาพวงจรสำหรับกล้องรุ่นนี้ทุกรุ่นแสดงในภาพที่ 1
รูปที่ 2, 3 แสดงให้เห็นว่าสายจัมเปอร์และส่วนประกอบเชื่อมต่อกันอย่างไร
หากไม่มีโครงยึดอะลูมิเนียม ภาพเหล่านั้นจะนอนตะแคง
คำเตือน
ตั้งโปรแกรม Arduino ของคุณก่อนที่จะต่อสายจัมเปอร์เข้ากับชิปกล้อง OV7670 ซึ่งจะป้องกันไม่ให้พินเอาท์พุต 5 โวลต์จากโปรแกรมก่อนหน้าทำลายชิปกล้อง OV7670 3v3 โวลต์
ขั้นตอนที่ 2: รายการชิ้นส่วน
ส่วนต่อไปนี้ได้มาจากhttps://www.aliexpress.com/
- 1 เท่านั้น OV7670 300KP โมดูลกล้อง VGA สำหรับ Arduino DIY KIT
- ขายึดกล้องเพียงตัวเดียวพร้อมน็อตและสลักเกลียว
- 1 เท่านั้น UNO R3 สำหรับ Arduino MEGA328P 100% เดิม ATMEGA16U2 พร้อมสาย USB
ชิ้นส่วนต่อไปนี้ได้มาจากท้องถิ่น
- สายจัมเปอร์ Arduino ตัวผู้-ตัวเมีย 18 ตัว
- สายจัมเปอร์ Arduinin หญิง-หญิง 3 ตัว
- มินิเบรดบอร์ด 1 อันเท่านั้น
- 4 ตัวต้านทาน 4K7 โอห์ม 1/2 วัตต์เท่านั้น
- ขาตั้งอลูมิเนียมเศษ 1 อันเท่านั้น
คุณจะต้องใช้แผ่นข้อมูลต่อไปนี้:
- https://web.mit.edu/6.111/www/f2016/tools/OV7670_20…
- https://www.haoyuelectronics.com/Attachment/OV7670%…
ขั้นตอนที่ 3: ทฤษฎี
ชิปกล้อง OV7670
เอาต์พุตเริ่มต้นจากชิปกล้อง OV7670 ประกอบด้วยสัญญาณวิดีโอ YUV (4:2:2) และรูปแบบคลื่นเวลา 3 รูปแบบ รูปแบบเอาต์พุตอื่นสามารถทำได้โดยการเขียนโปรแกรมการลงทะเบียนภายในผ่านบัสที่เข้ากันได้กับ I2C
สัญญาณวิดีโอ YUV (4:2:2) (ภาพที่ 1) เป็นลำดับต่อเนื่องของพิกเซลขาวดำ (ขาวดำ) คั่นด้วยข้อมูลสี U (ความแตกต่างของสีน้ำเงิน) และ V (ความแตกต่างของสีแดง)
รูปแบบเอาต์พุตนี้เรียกว่า YUV (4:2:2) เนื่องจากแต่ละกลุ่มที่มีขนาด 4 ไบต์มี 2 ไบต์ขาวดำและ 2 ไบต์สี
ขาวดำ
เพื่อให้ได้ภาพขาวดำ เราต้องสุ่มตัวอย่างทุก ๆ ไบต์ข้อมูล
Arduino มีหน่วยความจำเข้าถึงโดยสุ่มเพียง 2K แต่แต่ละเฟรมประกอบด้วย 640*2*480 = 307, 200 ไบต์ข้อมูล นอกจากว่าเราเพิ่มตัวจับเฟรมลงใน OV7670 ข้อมูลทั้งหมดจะต้องส่งไปยังพีซีทีละบรรทัดเพื่อการประมวลผล
มีความเป็นไปได้สองอย่าง:
สำหรับแต่ละเฟรมที่ต่อเนื่องกัน 480 เฟรม เราสามารถจับภาพหนึ่งบรรทัดไปยัง Arduino ที่ความเร็วสูงก่อนส่งไปยังพีซีที่ความเร็ว 1Mbps วิธีการดังกล่าวจะทำให้ OV7670 ทำงานด้วยความเร็วเต็มที่ แต่จะใช้เวลานาน (มากกว่าหนึ่งนาที)
แนวทางที่ฉันได้ดำเนินการคือทำให้ PCLK ช้าลงเป็น 8uS และส่งแต่ละตัวอย่างตามที่มาถึง วิธีนี้เร็วกว่าอย่างเห็นได้ชัด (6.4 วินาที)
ขั้นตอนที่ 4: บันทึกการออกแบบ
ความเข้ากันได้
ชิปกล้อง OV7670 เป็นอุปกรณ์โวลต์ 3v3 แผ่นข้อมูลระบุว่าแรงดันไฟฟ้าที่สูงกว่า 3.5 โวลต์จะทำให้ชิปเสียหาย
เพื่อป้องกันไม่ให้ Arduino 5 โวลต์ของคุณทำลายชิปกล้อง OV7670:
- สัญญาณนาฬิกาภายนอก (XCLK) จาก Arduino จะต้องลดลงสู่ระดับที่ปลอดภัยโดยใช้ตัวแบ่งแรงดันไฟฟ้า
- ต้องปิดการใช้งานตัวต้านทานแบบดึงขึ้น Arduino I2C ภายในถึง 5 โวลต์และแทนที่ด้วยตัวต้านทานแบบดึงขึ้นภายนอกสำหรับแหล่งจ่ายไฟ 3v3 โวลต์
- ตั้งโปรแกรม Arduino ของคุณก่อนที่จะต่อสายจัมเปอร์เนื่องจากหมุดบางตัวอาจยังคงตั้งโปรแกรมเป็นเอาต์พุตจากโครงการก่อนหน้า !!! (ฉันเรียนมาอย่างยากลำบาก … โชคดีที่ฉันซื้อสองอันเพราะราคาถูกมาก)
นาฬิกาภายนอก
ชิปกล้อง OV7670 ต้องการนาฬิกาภายนอกในช่วงความถี่ 10Mhz ถึง 24MHz
ความถี่สูงสุดที่เราสามารถสร้างจาก Arduino 16MHz คือ 8MHz แต่ดูเหมือนว่าจะใช้ได้
ลิงค์อนุกรม
ใช้เวลาอย่างน้อย 10 uS (ไมโครวินาที) ในการส่งข้อมูล 1 ไบต์ผ่านลิงก์ซีเรียล 1Mbps (ล้านบิตต่อวินาที) คราวนี้ประกอบขึ้นดังนี้:
- 8 บิตข้อมูล (8us)
- 1 บิตเริ่มต้น (1uS)
- 1 บิตหยุด (1uS)
นาฬิกาภายใน
ความถี่นาฬิกาพิกเซลภายใน (PCLK) ภายใน OV7670 ถูกกำหนดโดยบิต[5:0] ภายในรีจิสเตอร์ CLKRC (ดูรูปที่ 1) [1]
หากเราตั้งค่า bits[5:0] = B111111 = 63 และนำไปใช้กับสูตรข้างต้นแล้ว:
- F(นาฬิกาภายใน) = F (นาฬิกาอินพุต)/(บิต[5:0}+1)
- = 8000000/(63+1)
- = 125000 เฮิรตซ์ หรือ
- = 8uS
เนื่องจากเราสุ่มตัวอย่างทุก ๆ ไบต์ข้อมูลทุก ๆ วินาที ช่วงเวลา PCLK ที่ 8uS ส่งผลให้ตัวอย่าง 16uS ซึ่งเป็นเวลาเพียงพอในการส่งข้อมูล 1 ไบต์ (10uS) เหลือ 6uS สำหรับการประมวลผล
อัตราเฟรม
เฟรมวิดีโอ VGA แต่ละเฟรมประกอบด้วย 784*510 พิกเซล (องค์ประกอบภาพ) ซึ่งจะแสดง 640*480 พิกเซล เนื่องจากรูปแบบเอาต์พุต YUV (4:2:2) มีข้อมูลเฉลี่ย 2 ไบต์ต่อพิกเซล แต่ละเฟรมจะใช้เวลา 784*2*510*8 uS = 6.4 วินาที
กล้องนี้ไม่เร็ว!!!
การวางตำแหน่งแนวนอน
รูปภาพอาจถูกย้ายในแนวนอนหากเราเปลี่ยนค่า HSTART และ HSTOP โดยที่ยังคงความต่าง 640 พิกเซลไว้
เมื่อย้ายรูปภาพไปทางซ้าย ค่า HSTOP ของคุณอาจน้อยกว่าค่า HSTART!
อย่าตื่นตระหนก … ทั้งหมดนี้เกี่ยวข้องกับการล้นเกินตามที่อธิบายไว้ใน ภาพที่ 2
ทะเบียน
OV7670 มีรีจิสเตอร์แปดบิต 201 รายการสำหรับควบคุมสิ่งต่างๆ เช่น เกน สมดุลสีขาว และการรับแสง
หนึ่งไบต์ข้อมูลอนุญาตให้มีได้ 256 ค่าในช่วง [0] ถึง [255] หากเราต้องการการควบคุมมากกว่านี้ เราต้องเรียงซ้อนรีจิสเตอร์หลายตัว สองไบต์ทำให้เรามีความเป็นไปได้ 65536 … สามไบต์ให้เรา 16, 777, 216
รีจิสเตอร์ AEC (การควบคุมค่าแสงอัตโนมัติ) 16 บิตที่แสดงในรูปภาพที่ 3 เป็นตัวอย่างดังกล่าว และสร้างขึ้นโดยการรวมส่วนของรีจิสเตอร์สามตัวต่อไปนี้เข้าด้วยกัน
- ประชาคมเศรษฐกิจอาเซียน[5:0] = ประชาคมเศรษฐกิจอาเซียน[15:10]
- เออีซี[7:2] = เออีซี[9:2]
- COM1[1:0] = AEC[1:0]
ถูกเตือน … ที่อยู่ลงทะเบียนไม่ได้ถูกจัดกลุ่มเข้าด้วยกัน !
ผลข้างเคียง
อัตราเฟรมที่ช้าทำให้เกิดผลข้างเคียงที่ไม่ต้องการจำนวนมาก:
เพื่อให้ได้ค่าแสงที่ถูกต้อง OV7670 คาดว่าจะทำงานที่อัตราเฟรมที่ 30 fps (เฟรมต่อวินาที) เนื่องจากแต่ละเฟรมใช้เวลา 6.4 วินาที ชัตเตอร์อิเล็กทรอนิกส์จึงเปิดได้นานกว่าปกติถึง 180 เท่า ซึ่งหมายความว่าภาพทั้งหมดจะได้รับแสงมากเกินไป เว้นแต่ว่าเราจะเปลี่ยนค่ารีจิสเตอร์บางค่า
เพื่อป้องกันการรับแสงมากเกินไป ฉันได้ตั้งค่าบิตรีจิสเตอร์ AEC (การควบคุมการรับแสงอัตโนมัติ) ทั้งหมดเป็นศูนย์ ถึงกระนั้นก็จำเป็นต้องใช้ฟิลเตอร์ Neutral Density ที่ด้านหน้าเลนส์เมื่อแสงจ้า
การเปิดรับแสงเป็นเวลานานอาจส่งผลต่อข้อมูล UV เนื่องจากฉันยังไม่พบชุดค่าผสมของรีจิสเตอร์ที่ให้สีที่ถูกต้อง … ให้พิจารณาว่าสิ่งนี้อยู่ในระหว่างดำเนินการ
บันทึก
[1]
สูตรที่แสดงในแผ่นข้อมูล (ภาพที่ 1) ถูกต้อง แต่ช่วงแสดงเฉพาะ bits[4:0] ?
ขั้นตอนที่ 5: Timing Waveforms
หมายเหตุที่มุมล่างซ้ายของไดอะแกรม "VGA Frame Timing" (ภาพที่ 1) อ่านว่า:
สำหรับ YUV/RGB tp = 2 x TPCLK
รูปที่ 1, 2 และ 3 ตรวจสอบแผ่นข้อมูลและยืนยันว่า Omnivision ถือว่าทุกๆ 2 ไบต์ข้อมูลเทียบเท่ากับ 1 พิกเซล
รูปคลื่นของออสซิลโลสโคปยังยืนยันว่า HREF ยังคงอยู่ในระดับต่ำในระหว่างช่วงเว้นระยะ
รูปที่ 4 ยืนยันว่าเอาต์พุต XCLK จาก Arduino คือ 8MHz เหตุผลที่เราเห็นคลื่นไซน์ แทนที่จะเป็นคลื่นสี่เหลี่ยม ก็คือฮาร์โมนิกแปลก ๆ ทั้งหมดไม่สามารถมองเห็นได้ในออสซิลโลสโคปสุ่มตัวอย่าง 20MHz ของฉัน
ขั้นตอนที่ 6: ตัวจับเฟรม
เซ็นเซอร์ภาพภายในชิปกล้อง OV7670 ประกอบด้วยอาร์เรย์ 656*486 พิกเซล ซึ่งใช้ตารางขนาด 640*480 พิกเซลสำหรับภาพถ่าย
ค่าลงทะเบียน HSTART, HSTOP, HREF และ VSTRT, VSTOP, VREF ใช้เพื่อจัดตำแหน่งภาพเหนือเซ็นเซอร์ หากภาพอยู่ในตำแหน่งที่ไม่ถูกต้องบนเซนเซอร์ คุณจะเห็นแถบสีดำที่ขอบหนึ่งด้านหรือมากกว่าตามที่อธิบายไว้ในส่วน "หมายเหตุการออกแบบ"
OV7670 จะสแกนแต่ละบรรทัดของรูปภาพทีละหนึ่งพิกเซลโดยเริ่มจากมุมซ้ายบนจนถึงพิกเซลล่างขวา Arduino เพียงส่งพิกเซลเหล่านี้ไปยังพีซีผ่านลิงค์อนุกรมดังแสดงใน ภาพที่ 1
งานของตัวจับเฟรมคือการจับภาพแต่ละพิกเซล 640*480=307200 พิกเซลและแสดงเนื้อหาในหน้าต่าง "รูปภาพ"
การประมวลผล 3 ทำได้โดยใช้รหัสสี่บรรทัดต่อไปนี้ !!
รหัสบรรทัดที่ 1:
byte byteBuffer = ไบต์ใหม่[maxBytes+1]; // โดยที่ maxBytes=307200
รหัสพื้นฐานในคำสั่งนี้สร้าง:
- อาร์เรย์ไบต์ 307201 ที่เรียกว่า "byteBuffer [307201]"
- ไบต์เพิ่มเติมสำหรับอักขระสิ้นสุด (การป้อนบรรทัด)
รหัสบรรทัด 2:
ขนาด (640, 480);
รหัสพื้นฐานในคำสั่งนี้สร้าง:
- ตัวแปรที่เรียกว่า “width=640;”
- ตัวแปรที่เรียกว่า “height=480”;
- อาร์เรย์พิกเซล 3000,000 พิกเซลที่เรียกว่า "พิกเซล [307000]"
- หน้าต่าง "รูปภาพ" ขนาด 640*480 พิกเซลซึ่งแสดงเนื้อหาของอาร์เรย์พิกเซล หน้าต่าง "รูปภาพ" นี้ได้รับการรีเฟรชอย่างต่อเนื่องที่อัตราเฟรม 60 เฟรมต่อวินาที
รหัสบรรทัด 3:
byteCount = myPort.readBytesUntil(lf, byteBuffer);
รหัสพื้นฐานในคำสั่งนี้:
- บัฟเฟอร์ข้อมูลขาเข้าในเครื่องจนกว่าจะเห็นอักขระ "lf" (linefeed)
- หลังจากนั้นจะดัมพ์ข้อมูลในเครื่อง 30,700 ไบต์แรกลงในอาร์เรย์ byteBuffer
- นอกจากนี้ยังบันทึกจำนวนไบต์ที่ได้รับ (307201) ลงในตัวแปรที่เรียกว่า “byteCount”
รหัสบรรทัด 4:
พิกเซล = สี(byteBuffer);
เมื่อวางใน for-next-loop โค้ดพื้นฐานในคำสั่งนี้:
- คัดลอกเนื้อหาของอาร์เรย์ "byteBuffer " ไปยังอาร์เรย์ "pixels"
- เนื้อหาที่ปรากฏในหน้าต่างรูปภาพ
จังหวะสำคัญ:
ตัวจับเฟรมรับรู้การกดแป้นต่อไปนี้:
- 'c' = จับภาพ
- 's' = บันทึกภาพลงในไฟล์
ขั้นตอนที่ 7: ซอฟต์แวร์
ดาวน์โหลดและติดตั้งแต่ละแพ็คเกจซอฟต์แวร์ต่อไปนี้ หากยังไม่ได้ติดตั้ง:
- “Arduino” จาก
- “จาวา 8” จาก https://java.com/en/download/ [1]
- "กำลังดำเนินการ 3" จาก
การติดตั้งร่าง Arduino:
- ถอดสายจัมเปอร์ OV7670 ทั้งหมด [2]
- ต่อสาย USB เข้ากับ Arduino. ของคุณ
- คัดลอกเนื้อหาของ "OV7670_camera_mono_V2.ino" (ที่แนบมา) ลงใน Arduino "sketch" และบันทึก
- อัปโหลดภาพร่างไปยัง Arduino ของคุณ
- ถอดปลั๊ก Arduino
- ตอนนี้คุณสามารถเชื่อมต่อสายจัมเปอร์ OV7670 อีกครั้งได้อย่างปลอดภัย
- เชื่อมต่อสาย USB อีกครั้ง
การติดตั้งและเรียกใช้ร่างการประมวลผล
- คัดลอกเนื้อหาของ "OV7670_camera_mono_V2.pde" (ที่แนบมา) ลงใน "สเก็ตช์" ของการประมวลผลและบันทึก
- คลิกปุ่ม "วิ่ง" ด้านซ้ายบน … หน้าต่างภาพสีดำจะปรากฏขึ้น
- คลิกที่หน้าต่างภาพ "สีดำ"
- กดปุ่ม "c" เพื่อถ่ายภาพ (ประมาณ 6.4 วินาที)
- กดปุ่ม “s” เพื่อบันทึกภาพในโฟลเดอร์การประมวลผลของคุณ
- ทำซ้ำขั้นตอนที่ 4 & 5
- คลิกปุ่ม "หยุด" เพื่อออกจากโปรแกรม
หมายเหตุ
[1]
การประมวลผล 3 ต้องใช้ Java 8
[2]
นี่เป็นขั้นตอนด้านความปลอดภัย "ครั้งเดียว" เพื่อหลีกเลี่ยงไม่ให้ชิปกล้อง OV7670 ของคุณเสียหาย
จนกว่าภาพสเก็ตช์ “OV7670_camera_mono.ini” จะถูกอัปโหลดไปยัง Arduino ของคุณ ตัวต้านทานแบบดึงขึ้นภายในจะเชื่อมต่อกับ 5 โวลต์ บวกกับมีความเป็นไปได้ที่สายข้อมูล Arduino บางเส้นอาจเป็นเอาต์พุต 5 โวลต์ … ซึ่งทั้งหมดนั้นเป็นอันตรายถึงชีวิต ชิปกล้อง 3v3 โวลต์ OV7670
เมื่อ Arduino ได้รับการตั้งโปรแกรมแล้ว ไม่จำเป็นต้องทำซ้ำขั้นตอนนี้ และค่ารีจิสเตอร์อาจเปลี่ยนแปลงได้อย่างปลอดภัย
ขั้นตอนที่ 8: การรับภาพสี
ซอฟต์แวร์ต่อไปนี้เป็นเพียงการทดลองและโพสต์ด้วยความหวังว่าเทคนิคบางอย่างจะเป็นประโยชน์ สีดูเหมือนจะกลับด้าน … ฉันยังไม่พบการตั้งค่าการลงทะเบียนที่ถูกต้อง หากคุณพบวิธีแก้ปัญหาโปรดโพสต์ผลลัพธ์ของคุณ
หากเราต้องการได้ภาพสี ไบต์ข้อมูลทั้งหมดจะต้องถูกจับและใช้สูตรต่อไปนี้
OV7670 ใช้สูตรต่อไปนี้เพื่อแปลงข้อมูลสี RGB (แดง เขียว น้ำเงิน) เป็น YUV (4:2:2): [1]
- Y = 0.31*R + 0.59*G + 0.11*B
- U = B – Y
- วี = R – Y
- Cb = 0.563*(B-Y)
- Cr = 0.713*(R-Y)
สูตรต่อไปนี้อาจใช้เพื่อแปลง YUV (4:2:2) กลับเป็นสี RGB: [2]
- R = Y + 1.402* (Cr – 128)
- G = Y – 0.344136*(Cb -128) – 0.714136*(Cr -128)
- B = Y + 1.772*(Cb -128)
ซอฟต์แวร์ที่แนบมาเป็นเพียงส่วนเสริมของซอฟต์แวร์ขาวดำ:
- คำขอจับภาพ "c" จะถูกส่งไปยัง Arduino
- Arduino ส่งไบต์เลขคู่ (ขาวดำ) ไปยัง PC
- พีซีจะบันทึกไบต์เหล่านี้ลงในอาร์เรย์
- Arduino ต่อไปจะส่งไบต์เลขคี่ (chroma) ไปยังพีซี
- ไบต์เหล่านี้ถูกบันทึกลงในอาร์เรย์ที่สอง … ตอนนี้เรามีรูปภาพทั้งหมดแล้ว
- ขณะนี้ สูตรข้างต้นใช้กับกลุ่มข้อมูล UYVY สี่ไบต์แต่ละกลุ่ม
- พิกเซลสีที่ได้จะถูกวางไว้ในอาร์เรย์ "พิกเซล"
- พีซีจะสแกนอาร์เรย์ "พิกเซล" และรูปภาพจะปรากฏในหน้าต่าง "รูปภาพ"
ซอฟต์แวร์ Processing 3 จะแสดงการสแกนแต่ละครั้งและผลลัพธ์สุดท้ายโดยสังเขป:
- ภาพที่ 1 แสดงข้อมูล U & V chroma จากการสแกน 1
- ภาพที่ 2 แสดงข้อมูลความสว่าง Y1 & Y2 จากการสแกน 2
- ภาพที่ 3 แสดงภาพสี … มีสิ่งเดียวเท่านั้น … กระเป๋าควรเป็นสีเขียว !!
ฉันจะโพสต์รหัสใหม่เมื่อฉันแก้ไขโปรแกรมนี้แล้ว …
ข้อมูลอ้างอิง:
[1]
www.haoyuelectronics.com/Attachment/OV7670%… (หน้า 33)
[2]
en.wikipedia.org/wiki/YCbCr (การแปลง JPEG)
คลิกที่นี่เพื่อดูคำแนะนำอื่น ๆ ของฉัน
แนะนำ:
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: 5 ขั้นตอน
การออกแบบเกมในการสะบัดใน 5 ขั้นตอน: การตวัดเป็นวิธีง่ายๆ ในการสร้างเกม โดยเฉพาะอย่างยิ่งเกมปริศนา นิยายภาพ หรือเกมผจญภัย
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: 3 ขั้นตอน
การตรวจจับใบหน้าบน Raspberry Pi 4B ใน 3 ขั้นตอน: ในคำแนะนำนี้ เราจะทำการตรวจจับใบหน้าบน Raspberry Pi 4 ด้วย Shunya O/S โดยใช้ Shunyaface Library Shunyaface เป็นห้องสมุดจดจำใบหน้า/ตรวจจับใบหน้า โปรเจ็กต์นี้มีจุดมุ่งหมายเพื่อให้เกิดความเร็วในการตรวจจับและจดจำได้เร็วที่สุดด้วย
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: 3 ขั้นตอน
วิธีการติดตั้งปลั๊กอินใน WordPress ใน 3 ขั้นตอน: ในบทช่วยสอนนี้ ฉันจะแสดงขั้นตอนสำคัญในการติดตั้งปลั๊กอิน WordPress ให้กับเว็บไซต์ของคุณ โดยทั่วไป คุณสามารถติดตั้งปลั๊กอินได้สองวิธี วิธีแรกคือผ่าน ftp หรือผ่าน cpanel แต่ฉันจะไม่แสดงมันเพราะมันสอดคล้องกับ
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): 8 ขั้นตอน
การลอยแบบอะคูสติกด้วย Arduino Uno ทีละขั้นตอน (8 ขั้นตอน): ตัวแปลงสัญญาณเสียงล้ำเสียง L298N Dc ตัวเมียอะแดปเตอร์จ่ายไฟพร้อมขา DC ตัวผู้ Arduino UNOBreadboardวิธีการทำงาน: ก่อนอื่น คุณอัปโหลดรหัสไปยัง Arduino Uno (เป็นไมโครคอนโทรลเลอร์ที่ติดตั้งดิจิตอล และพอร์ตแอนะล็อกเพื่อแปลงรหัส (C++)
เครื่อง Rube Goldberg 11 ขั้นตอน: 8 ขั้นตอน
เครื่อง 11 Step Rube Goldberg: โครงการนี้เป็นเครื่อง 11 Step Rube Goldberg ซึ่งออกแบบมาเพื่อสร้างงานง่ายๆ ในรูปแบบที่ซับซ้อน งานของโครงการนี้คือการจับสบู่ก้อนหนึ่ง