मैं लैन पर कैमरे द्वारा प्राप्त छवियों पर कैनी एज डिटेक्शन करने के लिए ओपनसीवी का उपयोग कर रहा हूं। यह काम करता है, लेकिन मैं भ्रष्ट JPEG डेटा प्राप्त करता रहता हूं: जब मैं imshow("recv", canny) करता हूं, तो हर कुछ फ्रेम में एक बार रन टाइम पर डेटा सेगमेंट त्रुटियों का समयपूर्व अंत, लेकिन मुझे वह नहीं मिलता है अगर मैं imshow("recv", frame) करता हूं।

// Block until receive message from a client
do {
    recvMsgSize = sock.recvFrom(buffer, BUF_LEN, sourceAddress, sourcePort);
} while (recvMsgSize > sizeof(int));
int total_pack = ((int*)buffer)[0];

char* longbuf = new char[double(PACK_SIZE * total_pack)];
for (int i = 0; i < total_pack; i++) {
    recvMsgSize = sock.recvFrom(buffer, BUF_LEN, sourceAddress, sourcePort);
         if (recvMsgSize != PACK_SIZE) {
         continue;
    }
    memcpy(&longbuf[i * PACK_SIZE], buffer, PACK_SIZE);
}

Mat rawData = Mat(1, PACK_SIZE * total_pack, CV_8UC1, longbuf);
Mat frame = imdecode(rawData, IMREAD_COLOR);
if (frame.size().width == 0) {
    continue;
}
Mat canny = CannyThreshold(frame);
imshow("recv", canny);
delete[] longbuf;
0
Samuel Martel 2 मई 2019, 22:11

1 उत्तर

सबसे बढ़िया उत्तर

यदि आप मैट फॉर्म में "फ्रेम" प्राप्त कर सकते हैं, तो शायद इस लाइन में कुछ गड़बड़ है:

Mat canny = CannyThreshold(frame);

शायद आप इस लाइन को कुछ इस तरह से बदल सकते हैं:

int minCannyThreshold = 190;
int maxCannyThreshold = 230;
Canny(frame, frame, minCannyThreshold, maxCannyThreshold, 5, true);
imshow("recv", frame);
0
Yunus Temurlenk 6 मई 2019, 06:11