как использовать cv :: Mat imgbuf, созданный указателем на видео данные - PullRequest
0 голосов
/ 19 апреля 2019

Я читаю необработанные видеоданные из буфера чтения, используя

cv::Mat imgbuf(Size(640, 480), CV_8UC3, &mem[0], (640*3));

Эта переменная imgbuf Я перехожу к алгоритму обнаружения лица, который распознает лицо и рисует прямоугольник вокруг лица. после этого я получаю что-то вроде

output-without-resize-function

Я пытался с приведенным ниже кодом, где я выполняю операцию изменения размера перед передачей алгоритму обнаружения лица. с помощью этого метода он работает нормально. но без изменения размера я получаю заметный вывод с прямоугольником вокруг лица.

output-with-resize-function

 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);

может кто-нибудь помочь разобраться с этой проблемой

1 Ответ

0 голосов
/ 22 апреля 2019

Проверьте этот метод:

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);

После получения действительного результата вы можете оптимизировать его и использовать меньше "Мат" с.

...