การย้ายโครงการ OpenCV จากเดสก์ท็อป C ++ ไปยัง Android NDK

ความตั้งใจของฉันคือทดสอบการปรับเปลี่ยนอัลกอริทึม OpenCV โดยเฉพาะตัวตรวจจับและตัวอธิบายคุณลักษณะ ORB ดังนั้นฉันจึงเริ่มพัฒนาบนเดสก์ท็อปด้วย C++ และคัดลอกไฟล์ .cpp บางไฟล์จากแหล่ง OpenCV โดยเฉพาะ orb.ccp, fast.cpp, precomp.cpp, fast_score.cpp ไฟล์แรกคือไฟล์หลักของอัลกอริทึม ไฟล์ที่สองคือตัวตรวจจับฟีเจอร์ที่ใช้โดย ORB ไฟล์ที่สามและสี่จำเป็นตามที่เรียกด้วย "รวม" ใน fast.cpp แน่นอนว่าฉันคัดลอกส่วนหัวและการประกาศวิธีการจาก OpenCV .hpp สร้างส่วนหัวของฉัน ฉันเปลี่ยนชื่อของทั้งสองคลาสที่เกี่ยวข้อง (ORB และ FAST -> myORB และ myFAST) ในไฟล์ทั้งหมด เพื่อให้คุณสามารถแยกแยะการเรียกอัลกอริธึมเวอร์ชันของฉันจาก OpenCV ได้ เนื่องจากยังจำเป็นต้องมี OpenCV สำหรับ ฟังก์ชั่น imgproc ทั้งหมด, คอร์, คลาส Mat ... ใช้ภายในไฟล์ cpp ที่แก้ไข

จนถึงตอนนี้ ใช้งานได้ดี ฉันสามารถใช้ ORB เวอร์ชันของฉันที่คัดลอกมา และนำการเปลี่ยนแปลงไปใช้กับอัลกอริทึมได้ในที่สุด

ปัญหาเกิดขึ้นเมื่อฉันเปลี่ยนมาใช้ Android NDK สิ่งที่ฉันทำหลังจากตั้งค่าโปรเจ็กต์ด้วย NDK คือการสร้างวิธี JNI โดยฉันใช้โค้ดที่จะใช้อัลกอริทึม ORB จากนั้นฉันจะนำเข้าไฟล์ .cpp และ .hpp ด้านบน ตั้งค่าไฟล์ .mk และอื่นๆ ที่เกี่ยวข้อง รวบรวมไฟล์ของฉัน และตั้งค่าโปรเจ็กต์ให้ใช้ OpenCV4Android อย่างชัดเจน

ปัญหามีดังต่อไปนี้: อัลกอริธึมของฉันใช้งานได้ โค้ดถูกคอมไพล์/สร้างและเปิดใช้งานโดย Eclipse ADT และฉันสามารถเรียกคลาส myORB ได้ อย่างไรก็ตาม เมื่อฉันเปิดไฟล์เวอร์ชันของฉัน สำหรับ istance (my)orb.cpp ในตัวแก้ไขของ ADT ปัญหาเกิดขึ้น: รหัสมีข้อผิดพลาดมากมาย สัมพันธ์กับวิธี (opencv) ที่ไม่มีอยู่ ("ไม่สามารถแก้ไขได้" ), (opencv) วิธีการที่ถูกเรียกพร้อมกับอาร์กิวเมนต์ที่ไม่ถูกต้อง ... ดังนั้นหลังจากที่ฉันเปิดไฟล์ มันแสดงข้อผิดพลาด และจากนั้นก็เป็นไปไม่ได้ที่จะสร้างโปรเจ็กต์ใน ADT อีกครั้ง แต่ถ้าฉันลบและคัดลอกไฟล์ .cpp กลับเข้าไป โปรเจ็กต์ก็คอมไพล์อีกครั้งโดยไม่มีปัญหาจนกว่าจะเปิดอีกครั้ง...


person Alessandro Gaietta    schedule 26.06.2013    source แหล่งที่มา


คำตอบ (1)


ปัญหาเกิดจาก Android ADT และ/หรือ Android NDK ตัวแก้ไขระบุข้อผิดพลาดที่เป็นเท็จ ที่จริงแล้วคอนโซลระบุว่าโค้ด C ได้รับการคอมไพล์โดยไม่มีข้อผิดพลาด อย่างไรก็ตาม Eclipse ไม่อนุญาตให้เรียกใช้โค้ด/แอปซึ่งมีข้อผิดพลาดตามที่เขากล่าวไว้ ดังนั้นวิธีที่เร็วที่สุดในการแก้ไขคือแก้ไขคุณสมบัติของโปรเจ็กต์ใน:

Project -> Properties -> C / C + + General -> Code Analysis

เปลี่ยน "ความรุนแรง" ของ "ปัญหา" ที่ปรากฏในตัวแก้ไขเป็น "คำเตือน" หรือประเภทอื่น ๆ

person Alessandro Gaietta    schedule 18.07.2013
comment
วู ขอบคุณที่ได้ผลสำหรับฉัน แต่มันไม่ใช่วิธีแก้ปัญหาที่แท้จริง ...... มีวิธีแก้ไขปัญหานี้ไหม - person MolhamStein; 18.03.2014