TODO:ROS move_base learning

http://www.myexception.cn/cpp/2152017.html
使用UMat来实现硬件加速可以通过以下步骤进行转换: ```cpp QElapsedTimer timer; timer.start(); float scale = 0.25; // default 8bits unsigned int maxPixel = 0; char *mpImgRaw; char *mpRGBBuffer; cv::Mat img_raw8(imgRawH, imgRawW, CV_8UC1); cv::Mat img_rawpixel(imgRawH, imgRawW, CV_16SC1, mpImgRaw); // 计算转换比率 for (int i = 0; i < mBitDepth; i++) maxPixel = maxPixel | (1 << i); cv::convertScaleAbs(img_rawpixel, img_raw8, 255.0 / maxPixel); // RAW8 --> 255 cv::Mat rgb(imgRawH, imgRawW, CV_8UC3); cv::cvtColor(img_raw8, rgb, cv::COLOR_BayerGR2RGB); qDebug() << "preProcess time:" << timer.elapsed() << "ms"; memcpy(mpRGBBuffer, rgb.data, rgb.cols * rgb.rows * 3); // TODO:待优化,深copy了,不做线程间为Crash QImage image((uchar *)mpRGBBuffer, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888); rimg = image; ``` 转换为使用UMat的代码如下: ```cpp QElapsedTimer timer; timer.start(); float scale = 0.25; // default 8bits unsigned int maxPixel = 0; char *mpImgRaw; char *mpRGBBuffer; cv::UMat img_raw8(imgRawH, imgRawW, CV_8UC1); cv::UMat img_rawpixel(imgRawH, imgRawW, CV_16SC1, mpImgRaw); // 计算转换比率 for (int i = 0; i < mBitDepth; i++) maxPixel = maxPixel | (1 << i); cv::convertScaleAbs(img_rawpixel, img_raw8, 255.0 / maxPixel); // RAW8 --> 255 cv::UMat rgb(imgRawH, imgRawW, CV_8UC3); cv::cvtColor(img_raw8, rgb, cv::COLOR_BayerGR2RGB); qDebug() << "preProcess time:" << timer.elapsed() << "ms"; memcpy(mpRGBBuffer, rgb.getMat(cv::ACCESS_READ).data, rgb.cols * rgb.rows * 3); // TODO:待优化,深copy了,不做线程间为Crash QImage image((uchar *)mpRGBBuffer, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888); rimg = image; ``` 在使用UMat时,将cv::Mat替换为cv::UMat,并使用`getMat()`方法获取UMat的底层数据进行拷贝。这样可以利用硬件加速来提高性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值