У меня есть два cv::Mat
объектов:OpenCV скопировать данные из * Мата к мату
cv::Mat *frameLeftRemap;
cv::Mat frameLeft2;
потоки данные в * frameLeftRemap из камеры. Мне нужно скопировать данные в frameLeft2, а затем удалить frameLeftRemap, чтобы избежать артефактов фрейма, которые я вижу. (Это было предложено в службу поддержки производителя камеры.)
функция:
void ProcessImageLeft(AVT::VmbAPI::FramePtr pFrame)
{
VmbUchar_t *pBuffer;
VmbUint32_t FrameWidth;
VmbUint32_t FrameHeight;
//prepare frame information:
pFrame->GetWidth(FrameWidth);
pFrame->GetHeight(FrameHeight);
pFrame->GetImage(pBuffer);
//edited
Mat1b imageL(FrameHeight, FrameWidth, (uchar*)pBuffer);
cv::remap(imageL, *frameLeftRemap, mx1, my1, cv::INTER_LINEAR);
frameLeft2 = frameLeftRemap->clone();
//frameLeftRemap->copyTo(frameLeft2);
cv::imshow("right", frameLeft2);
cv::waitKey(1);
delete frameLeftRemap;
}
как CopyTo и клон дают ошибку:
this is nullPtr. read access violation
Что я здесь делаю неправильно?
Пожалуйста, отправьте сообщение [mcve]. Как уже указывалось, это должно работать правильно, если ваши изображения все еще действительны. Кроме того, как правило, плохой идеей использовать 'Mat *', так как вы, вероятно, нарушите внутренний подсчет ссылок (как вы, вероятно, здесь) – Miki
отредактирован. Благодарю. – anti
Почему вы даже используете 'IplImage'? Пожалуйста, избегайте устаревших C api. Пожалуйста, рефакторируйте этот код, чтобы использовать только 'Mat'. Ошибка, вероятно, будет решена уже – Miki