2012-12-07 12 views
5

विफल रहा एंड्रॉयडOpenCV nMatToBitmap अभिकथन

12-05 21:08:55.486: E/cv::error()(6658): OpenCV Error: Assertion failed (src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols) in void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean), file /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp, line 107 
12-05 21:08:55.486: E/org.opencv.android.Utils(6658): nMatToBitmap catched cv::Exception: /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp:107: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 
12-05 21:08:55.486: E/CameraBridge(6658): Mat type: Mat [ 144*192*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x1024c0, dataAddr=0x44783010 ] 
12-05 21:08:55.486: E/CameraBridge(6658): Bitmap type: 384*288 
12-05 21:08:55.486: E/CameraBridge(6658): Utils.matToBitmap() throws an exception: /home/oleg/sources/opencv/modules/java/generator/src/cpp/utils.cpp:107: error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width == (uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2(JNIEnv*, jclass, jlong, jobject, jboolean) 

के लिए OpenCV के भीतर कुछ सामान्य कार्यों का उपयोग कर निम्न त्रुटियों हो रही है मुझे यकीन है कि अगर इस त्रुटि ही है नहीं कर रहा हूँ या यह एक और समस्या के कारण होती है, तो।

उत्तर

9

अभिकथन त्रुटि आप कह रहा है कि एक या निम्न परीक्षणों के अधिक विफल हो रहा है:

src.dims == 2 
info.height == (uint32_t)src.rows 
info.width == (uint32_t)src.cols 

मेरा अनुमान है कि info गंतव्य बिटमैप के आयाम शामिल हैं। उस स्थिति में, या तो आपका स्रोत मैट 2 आयाम नहीं है या गंतव्य बिटमैप के आयाम स्रोत मैट के आयामों से मेल नहीं खाते हैं।

इन दो पंक्तियों को

12-05 21:08:55.486: E/CameraBridge(6658): Mat type: Mat [ 144*192*CV_8UC3, isCont=true, isSubmat=false, nativeObj=0x1024c0, dataAddr=0x44783010 ] 
12-05 21:08:55.486: E/CameraBridge(6658): Bitmap type: 384*288 

सुझाव है कि अपने चटाई 144x192 है और अपने बिटमैप 384x288 है। ऐसा लगता है कि एक चित्र है और अन्य परिदृश्य प्लस आपका बिटमैप आपके मैट के दो बार संकल्प है।

+1

क्या कोई भी बिटमैप के समान आकार के लिए मैट को स्केल करने का तरीका सुझा सकता है? मुझे एक ही समस्या है लेकिन मैं अभी भी ओपनसीवी सीख रहा हूं इसलिए इसके साथ पर्याप्त कौशल नहीं है ... अग्रिम धन्यवाद! –

+0

प्रश्नों के रूप में प्रश्नों को सबसे अच्छे रूप में पोस्ट किया गया है, उत्तर के लिए टिप्पणियों के रूप में नहीं। एक छोटा कोड शामिल करना सुनिश्चित करें कि आपने अभी तक क्या प्रयास किया है और आप वास्तव में क्या करने की कोशिश कर रहे हैं। – SSteve

+0

आप पूरी तरह से सही हैं। मैंने सोचा कि क्योंकि इस प्रश्न से कड़ाई से संबंधित है यहां पोस्ट किया जा सकता है। आपके तेज़ उत्तर के लिए धन्यवाद। –

1

मैं तो टिप्पणी करने के लिए पर्याप्त प्रतिनिधि नहीं है मैं बजाय एक उत्तर प्रदान करेंगे:

जब 'onCameraFrame' विधि के साथ काम - इस दावे को फेंक दिया जाता है जबकि 'चटाई' तुम वापस से मेल नहीं खाता आउटपुट प्रदर्शित करने के लिए इस्तेमाल फ्रेम का आकार।

दूसरे शब्दों में - यदि आप किसी प्रकार की प्रसंस्करण के लिए आकार बदल रहे हैं, तो इसे डिस्प्ले पर वापस फेंकने से पहले इसे मूल आकार में वापस करना सुनिश्चित करें।

@Override 
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame 
inputFrame) { 
    mRgba = inputFrame.rgba(); 

    Mat resizeImage = new Mat(); 
    Size sz = new Size(800, 600); // Scale up to 800x600 
    Imgproc.resize(mRgba, resizeImage, sz); 

    // Do some sort of processing here on resized image. 

    Mat afterResize = new Mat(); 
    Size szAfter = new Size(640, // Scale back down to 640x480 (original dim.) 
    Imgproc.resize(resizeImage, afterResize, szAfter); 

    return afterResize; 
} 
+0

किसी और ने पहले से ही मेरा उत्तर निर्दिष्ट किया है - https://stackoverflow.com/questions/37970551/opencv-resize-failing – razodactyl