อินเตอร์เฟส OpenCV Python ทั้งหมดนี้แตกต่างกันอย่างไร


88

มี

  • opencv (ห้องสมุดจากพวก OpenCV)
  • cv (ไลบรารีเก่าจากพวก OpenCV) และ
  • pyopencvctypes-opencvกับบรรพบุรุษของมัน

อะไรคือความแตกต่างที่สำคัญและฉันควรใช้อันไหน?

คำตอบ:


139

อย่างเป็นทางการ OpenCV เผยแพร่อินเตอร์เฟส Python สองประเภทcvและcv2.

ประวัติย่อ:

cvผมเริ่มทำงานใน ในสิ่งนี้ประเภทข้อมูล OpenCV ทั้งหมดจะถูกเก็บรักษาไว้เช่นนี้ ตัวอย่างเช่นเมื่อโหลดรูปภาพจะมีรูปแบบcvMatเช่นเดียวกับใน C ++

สำหรับการดำเนินงานอาร์เรย์มีฟังก์ชั่นหลายอย่างcvSet2D, cvGet2Dฯลฯ และการอภิปรายบางคนบอกว่าพวกเขาจะช้าลง

สำหรับ imageROI คุณต้องมีฟังก์ชั่นพิเศษเช่นcvSetImageROI.

หากคุณพบรูปทรงcvSeqจะมีการส่งคืนโครงสร้างซึ่งใช้งานได้ไม่ดีเมื่อเทียบกับรายการ Python หรืออาร์เรย์ NumPy

(และฉันคิดว่าในไม่ช้าการพัฒนาจะหยุดลงก่อนหน้านี้มีเพียงอย่างเดียวcvต่อมา OpenCV มาพร้อมกับทั้งสองcvและcv2ตอนนี้มีในรุ่นล่าสุดมีเพียงcv2โมดูลและcvเป็นคลาสย่อยภายในcv2คุณต้องโทรimport cv2.cv as cvเพื่อเข้าถึง)

cv2:

cv2และเป็นคนล่าสุด ในการนี้ทุกอย่างจะกลับมาเป็นNumPyวัตถุเช่นndarray และnative Pythonวัตถุเช่นlists, tuples, dictionaryฯลฯ ดังนั้นเนื่องจากนี้สนับสนุน NumPy คุณสามารถดำเนินการใด ๆ ที่นี่ numpy NumPyเป็นไลบรารีการประมวลผลอาร์เรย์ที่เสถียรและรวดเร็ว

ตัวอย่างเช่นหากคุณโหลดรูปภาพระบบndarrayจะส่งคืนรูปภาพ

array[i,j] ให้ค่าพิกเซลที่ตำแหน่ง (i, j)

นอกจากนี้สำหรับ imageROI สามารถใช้การแบ่งส่วนอาร์เรย์เช่นROI=array[c1:c2,r1:r2]. ไม่จำเป็นต้องมีฟังก์ชั่นแยกต่างหาก

หากต้องการเพิ่มภาพสองภาพที่มีอยู่ไม่จำเป็นต้องเรียกใช้ฟังก์ชันใด ๆ res = img1+img2เพียงแค่ทำ (แต่การเพิ่ม NumPy เป็นการดำเนินการแบบโมดูโลสำหรับอาร์เรย์ uint8 เช่นรูปภาพดูบทความความแตกต่างระหว่าง Matrix Arithmetic ใน OpenCV และ Numpyเพื่อทราบข้อมูลเพิ่มเติม

รูปทรงที่ส่งคืนคือรายการอาร์เรย์ Numpy คุณสามารถค้นหาการอภิปรายรายละเอียดเกี่ยวกับรูปทรงในรูปทรง - 1: การเริ่มต้น

ในระยะสั้นด้วย cv2 ทุกอย่างง่ายขึ้นและค่อนข้างเร็ว

การอภิปรายง่ายๆในการ NumPy ความเร็วขึ้นcv2อยู่ในกองมากเกินคำถามเปรียบเทียบประสิทธิภาพของอินเตอร์เฟซ OpenCV-หลามพันธุ์และ CV2

pyopencv :

ฉันไม่ค่อยรู้เรื่องนี้ตั้งแต่ยังไม่ได้ใช้ แต่ดูเหมือนว่าจะหยุดการพัฒนาต่อไป

ฉันคิดว่ามันจะดีกว่าถ้ายึดติดกับห้องสมุดทางการ

ในระยะสั้นฉันขอแนะนำให้คุณใช้ cv2!

แก้ไข: คุณสามารถดูขั้นตอนการติดตั้งสำหรับcv2โมดูลในการติดตั้ง OpenCV ใน Windows สำหรับงูหลาม


อินเทอร์เฟซ cv2 Python จะถูกคอมไพล์และติดตั้งหากคุณสร้าง OpenCV จากแหล่งที่มา หากคุณใช้ไบนารีแพ็กเกจสำหรับ Linux หรือระบบปฏิบัติการอื่นคุณควรศึกษาเอกสารเกี่ยวกับระบบปฏิบัติการ / การแจกจ่ายของคุณ โปรดดูความช่วยเหลือจากgoo.gl/MUjXi
.

1
@Framester: ดูขั้นตอนการติดตั้ง cv2 ในลิงค์นี้: opencvpython.blogspot.in/2012/05/…
Abid Rahman K

คำตอบของ Abid นั้นยอดเยี่ยมมาก เพื่อเพิ่มอีกหนึ่งประเด็น: ฉันทำโปรเจ็กต์ด้วย Python 3.xและวิธีเดียวที่ฉันจะเข้าถึง opencv ได้คือผ่าน ctypes_opencv และ OpenCV 1.0 ดั้งเดิม อ้างว่ารองรับ OpenCV pre1.1 แต่ฉันไม่เคยใช้งานได้เลย ด้วยวิธีนี้คุณจะใช้ cvSetROI ดั้งเดิม ฯลฯ อินเทอร์เฟซ C-type
KobeJohn

หากคุณต้องการติดตั้งด้วย pip. อ่านที่นี่หรือทำ:pip install opencv-python
Timo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.