OpenCV在摄像机流窗口中设置ROI

本文关键字:设置 ROI 窗口 摄像机 OpenCV | 更新日期: 2023-09-27 18:06:06

我想在从相机捕获的图像中设置感兴趣的区域。怎么做呢?我使用c#与OpenCVSharp和Visual c#。

像这样:

using (CvCapture cap = CvCapture.FromCamera(0)) // device type + camera index
using (CvWindow v = new CvWindow("Live Stream"))
while (CvWindow.WaitKey(10) < 0)
            {
                using (IplImage src = cap.QueryFrame())
                v.Image = src;
              // Then set ROI and send it to picturebox
                pictureBox.Image = BitmapConverter.ToBitmap(ROI);
            }

OpenCV在摄像机流窗口中设置ROI

我不知道c#,但这里是我如何在c++中(使用OpenCV 2)做到这一点。希望翻译很容易。语句Mat roiRect = frame(Rect(200,200,100,100));创建了一个头,该头与frame共享数据,但只在感兴趣的区域。

using namespace cv;
int main(int argc, const char * argv[]) {
    VideoCapture cap; 
    if(argc > 1) 
        cap.open(string(argv[1])); 
    else 
        cap.open(0); 
    Mat frame; 
    namedWindow("video", 1); 
    for(;;) {
        cap >> frame; 
        if(!frame.data) 
            break; 
        //Create the region of interest
        Mat roiRect = frame(Rect(200,200,100,100));
        //Do something with the region of interest
        roiRect *= 0.4;
        imshow("video", frame); 
        if(waitKey(30) >= 0) 
            break;
    }
    return 0;
}

我会在图片的顶部创建一个矩形,下面的链接会有帮助。

使用创建的矩形来裁剪选定区域:

    Rectangle cropArea new Rectangle(0, 0, 10, 10);  
    Bitmap bmpImage = new Bitmap(img);
    Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);