在OpenCV中调整视频源的大小

时间:2015-08-29 09:12:50

标签: java opencv

我需要将我的网络摄像头输入调整为常量值,如430 * 315,以便从我的j面板查看而不调整大小仅显示一个小面积,等于调整大小的j面板,使用OpenCV VideoCapture方法从网络摄像头捕获视频

下面是我以前用来抓取框架的代码部分

if (webSource.grab()) {
                    try {

                        webSource.retrieve(frame);

                        Graphics g = jPanel2.getGraphics();

我试过

 Size sz = new Size(430, 315);
 Imgproc.resize(frame, frame, sz);

webSource.set(CV_CAP_PROP_FRAME_WIDTH, 430);
webSource.set(CV_CAP_PROP_FRAME_HEIGHT, 315);

我无法完成任何要求,所以有办法可以做到这一点

2 个答案:

答案 0 :(得分:0)

要将当前图像的某些部分作为新图像,请使用ROI(感兴趣区域)指定该部分。 ROI在这里是一个矩形,可以通过多种方式初始化。

很抱歉这是用C ++编写的,而不是Java;

指定区域的一些方法:

Rect ROI = Rect(Point(0, 0), Size(430, 315));
Rect ROI = Rect(0, 0, 430, 315);
Rect ROI = Rect(Point(x, y), Point(x + 430, y + 315));

现在获取捕获帧的一部分:

Mat windowedframe = frame(ROI);

警告:此方法不关心矩形的边界是否位于图像中,因此如果超出帧的分辨率,它将崩溃。

答案 1 :(得分:0)

从网络摄像头捕获帧时,您可以使用调整大小功能调整大小。

// Using C++
VideoCapture cap(0);
cap.set(CV_CAP_PROP_FRAME_WIDTH, 430);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 315);
Mat image;
cap.read(image);
resize(image, image, Size(430, 315), 0, 0, INTER_CUBIC);
namedWindow("firstframe", 1);
imshow("firstframe", image);
waitKey(0);

也许这可以解决问题。