首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用由指向视频数据的指针创建的cv::Mat imgbuf

如何使用由指向视频数据的指针创建的cv::Mat imgbuf
EN

Stack Overflow用户
提问于 2019-04-19 15:10:46
回答 1查看 162关注 0票数 0

我正在从读取缓冲区读取原始视频数据。

代码语言:javascript
复制
cv::Mat imgbuf(Size(640, 480), CV_8UC3, &mem[0], (640*3));

这个变量imgbuf传递给人脸检测算法,该算法检测人脸,并画出脸部周围的矩形。在那之后,我得到了输出,就像

在传递到人脸检测算法之前,我尝试使用下面的代码执行调整大小操作。通过使用这种方法,它工作得很好。但是没有调整大小的功能,我得到了明显的输出与矩形周围的脸。

代码语言:javascript
复制
 while(1)
 {
 unsigned char *mem = (unsigned char*)mmap(NULL, page_offset + len,
 PROT_READ |PROT_WRITE, MAP_PRIVATE, fd, page_base); 
 cv::Mat imgbuf(Size(640, 480), CV_8UC3, &mem[0], (640*3));

 cv::resize(imgbuf,imgbuf,(640,480)); //Dummy function to get the right output.


 auto result = v->facedetection(imgbuf);
    for (const auto &r : result.rects) {
 cv::rectangle(imgbuf,cv::Rect{ cv::Point(r.x * imgbuf.cols, r.y * 
 imgbuf.rows),cv::Size{(int)(r.width * imgbuf.cols), (int)(r.height * 
   imgbuf.rows) } },0xff);

   }
  imshow("face-detection", imgbuf);
  waitKey(1);

有人能帮忙解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-22 12:49:07

测试此方法:

代码语言:javascript
复制
unsigned char *mem = (unsigned char*)mmap(NULL, page_offset + len,
 PROT_READ |PROT_WRITE, MAP_PRIVATE, fd, page_base); 

cv::Mat imgbuf(480,640, CV_8UC3, &mem[0]);
cv::Mat img_2, img_3;
cv::resize(imgbuf,img_2,cv::Size(640,480));
img_2.copyTo(img_3);
auto result = v->facedetection(img_2);

for (const auto &r : result.rects)
{
   cv::Rect myR = cv::Rect(r.x * img_2.cols, r.y * img_2.rows, (int)(r.width * img_2.cols), 
   (int)(r.height * img_2.rows));

   cv::rectangle(img_3,myR,Scalar(0, 0, 255), 1);
}
imshow("Result", img_3);
waitKey(0);

在得到一个有效的结果后,您可以优化它并减少使用“Mat”的次数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55763958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档