gpt4 book ai didi

c++ - 实时相机上的 OpenCV ROI

转载 作者:行者123 更新时间:2023-11-28 05:10:33 25 4
gpt4 key购买 nike

我正在尝试在实时相机中设置 ROI 并在 ROI 中复制图片。但是,我尝试了很多网上的方法,仍然没有成功。我的部分代码如下所示:

 while(!protonect_shutdown)
{
listener.waitForNewFrame(frames);
libfreenect2::Frame *ir = frames[libfreenect2::Frame::Ir];
//! [loop start]


cv::Mat(ir->height, ir->width, CV_32FC1, ir->data).copyTo(irmat);


Mat img = imread("button.png");

cv::Rect r(1,1,100,200);

cv::Mat dstroi = img(Rect(0,0,r.width,r.height));
irmat(r).convertTo(dstroi, dstroi.type(), 1, 0);
cv::imshow("ir", irmat / 4500.0f);

int key = cv::waitKey(1);

protonect_shutdown = protonect_shutdown || (key > 0 && ((key & 0xFF) == 27));

listener.release(frames);
}

我的实时摄像头可以正常显示视频。在我的程序中没有错误,但是图片无法在 ROI 中显示。有没有人有一些想法?任何帮助表示赞赏。

最佳答案

我希望我理解你的问题,你想要这样的输出:

enter image description here

我在视频源上创建了一个大小为 100x200 的矩形,并在该矩形中显示了一张图片。

代码如下:

int main()
{
Mat frame,overlayFrame;

VideoCapture cap("video.avi");//use 0 for webcam
overlayFrame=imread("picture.jpg");

if (!cap.isOpened())
{
cout << "Could not capture video";
return -1;
}

Rect roi(1,1,100,200);//creating a rectangle of size 100x200 at point (1,1) on the videofeed

namedWindow("CameraFeed");

while ((cap.get(CV_CAP_PROP_POS_FRAMES) + 1) < cap.get(CV_CAP_PROP_FRAME_COUNT))
{
cap.read(frame);

resize(overlayFrame, overlayFrame, resize(overlayFrame, overlayFrame, Size(roi.width, roi.height));//changing the size of the image to fit in the roi

overlayFrame.copyTo(frame(roi));//copying the picture to the roi

imshow("CameraFeed", frame);

if (waitKey(27) >= 0)
break;
}
destroyAllWindows;
return 0;
}

关于c++ - 实时相机上的 OpenCV ROI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43597744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com