Поврежденные данные JPEG при выполнении Canny Edge Detection - PullRequest
0 голосов
/ 02 мая 2019

Я использую OpenCV для определения Canny Edge на изображениях, полученных камерой через локальную сеть.Это работает, но я продолжаю получать поврежденные данные 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;

1 Ответ

0 голосов
/ 06 мая 2019

если вы можете получить "рамку" в форме мата, то, вероятно, что-то не так с этой строкой:

Mat canny = CannyThreshold(frame);

Возможно, вы можете изменить эту строку следующим образом:

int minCannyThreshold = 190;
int maxCannyThreshold = 230;
Canny(frame, frame, minCannyThreshold, maxCannyThreshold, 5, true);
imshow("recv", frame);
...