यह बात है। मैं इन दिनों क्यूटी फ्रेमवर्क पर अपना ओपनसीवी कोड दोबारा लिख रहा था, और कोड विजुअल स्टूडियो 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 पर
डिबग जानकारी:
लाइन 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)
और पूरे डिबग जानकारी इस प्रकार है,
डीबग क्यूटी पर जानकारी:
ओएस: विंडोज़ 10 64-बिट
क्यूटी विजन: MSVC 2013
साथ Qt5.6.0दृश्य स्टूडियो विजन: विजुअल स्टूडियो 2013
OpenCV विजन: OpenCV3.0
अद्यतन: मैंने कुछ चर का intialized, और समस्या अभी भी वहाँ है।
अद्यतन 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 खुद से आता हूँ ।
update4: अच्छी तरह से, यह समस्या अपने आप द्वारा हल किया गया। मैंने Opencv दृष्टि को 3.0 से 2.4.12 में बदल दिया, फिर पूरी दुनिया शांत हो गई। तो मैं सही था, समस्या ओपनसीवी से ही आती है।
अपडेट 5: @ मिकी सही था, मैंने गलत libs का उपयोग किया था। मैं कल कल परियोजना को साफ़ करना भूल गया था, यही कारण है कि मैंने जो किया @Miki ने मुझे बताया लेकिन यह काम नहीं कर रहा था। Thx @Miki
लगता है जैसे आपके पास कहीं भी एक प्रारंभिक पॉइंटर के कारण अपरिभाषित व्यवहार नहीं है। –
मेरा अनुमान अनियमित वैरिएबल भी होगा (आवश्यक रूप से पॉइंटर्स नहीं, बल्कि यह भी int)। वीएस में आप डीबग मोड में निर्माण कर सकते हैं जिसमें वैरिएबल को 0 के साथ प्रारंभ किया जा रहा है और QtCreator में आपने रिलीज चुना होगा, जहां वे प्रारंभ नहीं किए गए हैं। यदि आपका कोड ओएस एक्स या लिनक्स पर बनाता है, तो मैं वहां वाल्ग्रिंड का उपयोग करके इसे निष्पादित कर दूंगा। –
अच्छी तरह से, मैंने सभी चर शुरू किए, लेकिन वही त्रुटि अभी भी है। –