老师 我从ffmpeg读取到视频数据 转化成cv::Mat mat 但是利用opencv只要imwrite 或者cvtColor 程序就会崩溃 我想可能是视频流格式错误啦?您帮我看看 辛苦了
我这样。。。。
int srcW = yuv420Frame->width;
int srcH = yuv420Frame->height;
SwsContext *swsCtx = sws_getContext(srcW, srcH, (AVPixelFormat)yuv420Frame->format, srcW, srcH, (AVPixelFormat)AV_PIX_FMT_BGR24, SWS_BICUBIC, NULL, NULL, NULL);
mat.create(cv::Size(srcW, srcH), CV_8UC4);
AVFrame bgr24Frame = av_frame_alloc();
av_image_fill_arrays(bgr24Frame->data, bgr24Frame->linesize, (uint8_t )mat.data, (AVPixelFormat)AV_PIX_FMT_BGR24, srcW, srcH, 1);
sws_scale(swsCtx,(const uint8_t const)yuv420Frame->data, yuv420Frame->linesize, 0, srcH, bgr24Frame->data, bgr24Frame->linesize);
av_frame_free(&bgr24Frame);
sws_freeContext(swsCtx);
try {
cv::imwrite(“test-1147.png”,mat); //《《《----------崩溃
}
catch (cv::Exception& ex)
{
fprintf(stderr, “Exception converting image to PNG format: %sn”, ex.what());
return;
}
或者这样
cv::Mat img1, img2, img3, img4;
img1 = cv::imread(“D:/文档/pic/test-47.bmp”);
int tongdao = img1.channels();
std::cerr << "图像 channel :"<< tongdao << std::endl;//输出3
**cv::cvtColor(img1, img2, cv::COLOR_BGR2GRAY);//《《------崩溃**
但是我这样就正常
Mat mat(480, 640, CV_8UC4);
try {
imwrite(“alpha.png”, mat, compression_params);//一切正常
}
catch (cv::Exception& ex) {
fprintf(stderr, “Exception converting image to PNG format: %sn”, ex.what());
return 1;
}
万分感激