ความตั้งใจของฉันคือทดสอบการปรับเปลี่ยนอัลกอริทึม 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 กลับเข้าไป โปรเจ็กต์ก็คอมไพล์อีกครั้งโดยไม่มีปัญหาจนกว่าจะเปิดอีกครั้ง...