2016-04-23 5 views
7

यह बात है। मैं इन दिनों क्यूटी फ्रेमवर्क पर अपना ओपनसीवी कोड दोबारा लिख ​​रहा था, और कोड विजुअल स्टूडियो 2013 पर अच्छी तरह से चलता है, लेकिन जब मैं इसे क्यूटी पर चलाता हूं, तो कुछ अजीब खुशी होती है।मैं विजुअल स्टूडियो और क्यूटी पर एक ही कोड क्यों संकलित करता हूं, लेकिन अलग-अलग परिणाम प्राप्त करता हूं?

समस्या को सरल बनाने के लिए, मैं प्रयोग करने के लिए एक और कोड लिखता हूं, और उम्मीद है कि समस्या अभी भी बनी हुई है।

यहाँ कोड है, जब मैं दृश्य स्टूडियो पर चला, सब कुछ ठीक है है

#include <iostream> 
#include <highgui.hpp> 
#include <core.hpp> 
#include <cv.hpp> 

using namespace std; 
using namespace cv; 

int main() 
{ 
    Mat view, viewGray; 
    vector<Point2f> pointBuf; 
    Size boardSize; 
    boardSize.width = 7; boardSize.height = 9; 
    view = imread("G:\\C++\\OpenCV\\OpenCV\\left1.jpg", 1); 
    cout << pointBuf.size() << endl; 
    cout << boardSize << endl; 
    cvtColor(view, viewGray, COLOR_BGR2GRAY); 
    bool found = findChessboardCorners(view, boardSize, pointBuf, \ 
     CV_CALIB_CB_ADAPTIVE_THRESH | \ 
     CV_CALIB_CB_FAST_CHECK | \ 
     CV_CALIB_CB_NORMALIZE_IMAGE); 
    cout << pointBuf.size() << endl; 
    cout << found << endl; 

    namedWindow("show", CV_WINDOW_NORMAL); 
    imshow("show", view); 
    waitKey(0); 

    return 0; 
} 

। डीबग परिणाम के रूप में पालन कर रहे हैं। VS2013 पर

डिबग जानकारी:

enter image description here

लाइन bool found = findChessboardCorners(...) से पहले pointBuf का आकार 0 है, और फिर यह है कि लाइन के बाद 63 में बदल जाता है।

लेकिन जब मैं क्यूटी पर चला, डिबग परिणाम बहुत हास्यास्पद में बदल जाता है,

बिना किसी चेतावनी के कोड namedWindow("show", CV_WINDOW_NORMAL); रन से पहले लेकिन एक अलग परिणाम प्राप्त, लाइन bool found = findChessboardCorners(...) भी 0 से पहले pointBuf के आकार, लेकिन यह है कि लाइन के बाद एक बहुत बड़ी संख्या है, जो 4294044375.

लेकिन namedWindow("show", CV_WINDOW_NORMAL); बाद, एक और समस्या तब होती है है में बदल जाता है,

:-1: error: Exception at 0x778a768b, code: 0xc0000005: read access violation at: 0x0, flags=0x0 (first chance)

और पूरे डिबग जानकारी इस प्रकार है,

डीबग क्यूटी पर जानकारी:

enter image description here

ओएस: विंडोज़ 10 64-बिट

क्यूटी विजन: MSVC 2013

साथ Qt5.6.0

दृश्य स्टूडियो विजन: विजुअल स्टूडियो 2013

OpenCV विजन: OpenCV3.0

अद्यतन: मैंने कुछ चर का intialized, और समस्या अभी भी वहाँ है। debug info

अद्यतन 2: @Miki लगता है कि मैं गलत OpenCV libs, (उदाहरण के लिए रिलीज में डिबग लिब्ज़ का उपयोग कर), तो मैं बाहर के रूप में पालन करें मेरे सभी विन्यास जानकारी देने के आशा है कि किसी को मुझ पर एक एहसान कर सकते हैं का उपयोग कर रहा हूँ।

QT += core 
QT -= gui 

CONFIG += c++11 

TARGET = testApp 
CONFIG += console 
CONFIG -= app_bundle 

TEMPLATE = app 

SOURCES += main.cpp 

INCLUDEPATH +=F:\opencv\build\include \ 
    F:\opencv\build\include\opencv \ 
    F:\opencv\build\include\opencv2 

LIBS +=F:\opencv\build\x86\vc12\lib\opencv_ts300.lib \ 
    F:\opencv\build\x86\vc12\lib\opencv_ts300d.lib \ 
    F:\opencv\build\x86\vc12\lib\opencv_world300.lib \ 
    F:\opencv\build\x86\vc12\lib\opencv_world300d.lib 

Update3: मैं opencv पुस्तकालयों इस बार फिर से संकलन, और फिर जैसा कि ऊपर एक ही परीक्षण करते हैं, मैं pointBuf का आकार 1638 नहीं 4294044375. है मिलता है तो मुझे यकीन है कि समस्या OpenCV खुद से आता हूँ ।

debug info again and again

update4: अच्छी तरह से, यह समस्या अपने आप द्वारा हल किया गया। मैंने Opencv दृष्टि को 3.0 से 2.4.12 में बदल दिया, फिर पूरी दुनिया शांत हो गई। तो मैं सही था, समस्या ओपनसीवी से ही आती है।

अपडेट 5: @ मिकी सही था, मैंने गलत libs का उपयोग किया था। मैं कल कल परियोजना को साफ़ करना भूल गया था, यही कारण है कि मैंने जो किया @Miki ने मुझे बताया लेकिन यह काम नहीं कर रहा था। Thx @Miki

+5

लगता है जैसे आपके पास कहीं भी एक प्रारंभिक पॉइंटर के कारण अपरिभाषित व्यवहार नहीं है। –

+1

मेरा अनुमान अनियमित वैरिएबल भी होगा (आवश्यक रूप से पॉइंटर्स नहीं, बल्कि यह भी int)। वीएस में आप डीबग मोड में निर्माण कर सकते हैं जिसमें वैरिएबल को 0 के साथ प्रारंभ किया जा रहा है और QtCreator में आपने रिलीज चुना होगा, जहां वे प्रारंभ नहीं किए गए हैं। यदि आपका कोड ओएस एक्स या लिनक्स पर बनाता है, तो मैं वहां वाल्ग्रिंड का उपयोग करके इसे निष्पादित कर दूंगा। –

+0

अच्छी तरह से, मैंने सभी चर शुरू किए, लेकिन वही त्रुटि अभी भी है। –

उत्तर

0

ठीक है, मुझे खेद है कि मैंने समाधान के तुरंत बाद जवाब नहीं जोड़ा था।

समस्या डीबग libs और libs रिलीज के बीच गलत गलत से आता है।

यहाँ सही विन्यास है,

CONFIG(debug, debug|release) 
{ 
    LIBS +=F:\opencv30\build\x86\vc12\lib\opencv_ts300d.lib \ 
    F:\opencv30\build\x86\vc12\lib\opencv_world300d.lib 
} 

CONFIG(release, debug|release) 
{ 
    LIBS +=F:\opencv30\build\x86\vc12\lib\opencv_ts300.lib \ 
    F:\opencv30\build\x86\vc12\lib\opencv_world300.lib 
} 

अन्त में, मैं तुम लोगों की मदद के सभी के लिए बहुत आभारी हूँ, और यहाँ सबसे गर्म दिल समुदाय मैंने कभी किया गया है है। Thx, सबको।

संबंधित मुद्दे