opencv/modules/videoio/test/test_camera.cpp

71 lines
2.5 KiB
C++
Raw Normal View History

// This file is part of OpenCV project.
// It is subject to the license terms in the LICENSE file found in the top-level directory
// of this distribution and at http://opencv.org/license.html.
// Note: all tests here are DISABLED by default due specific requirements.
// Don't use #if 0 - these tests should be tested for compilation at least.
//
// Usage: opencv_test_videoio --gtest_also_run_disabled_tests --gtest_filter=*VideoIO_Camera*<tested case>*
#include "test_precomp.hpp"
namespace opencv_test { namespace {
TEST(DISABLED_VideoIO_Camera, basic)
{
VideoCapture capture(0);
ASSERT_TRUE(capture.isOpened());
std::cout << "Camera 0 via " << capture.getBackendName() << " backend" << std::endl;
std::cout << "Frame width: " << capture.get(CAP_PROP_FRAME_WIDTH) << std::endl;
std::cout << " height: " << capture.get(CAP_PROP_FRAME_HEIGHT) << std::endl;
std::cout << "Capturing FPS: " << capture.get(CAP_PROP_FPS) << std::endl;
const int N = 100;
Mat frame;
int64 time0 = cv::getTickCount();
for (int i = 0; i < N; i++)
{
SCOPED_TRACE(cv::format("frame=%d", i));
capture >> frame;
ASSERT_FALSE(frame.empty());
EXPECT_GT(cvtest::norm(frame, NORM_INF), 0) << "Complete black image has been received";
}
int64 time1 = cv::getTickCount();
printf("Processed %d frames on %.2f FPS\n", N, (N * cv::getTickFrequency()) / (time1 - time0 + 1));
capture.release();
}
Merge pull request #12138 from wanghanmin:wanghanmin-patch-videoio_crossbarsetting-1 * Update videoio.hpp add VideoCapturePropertie for clossbar input pin setting * Update cap_dshow.cpp For some kind of capture card, such as "avermedia cv710 " , it use SerialDigital as input pin and so it can not work. Here added new PhysicalConnectorType enumeration: PhysConn_Video_YRYBY and PhysConn_Video_SerialDigital to support it. And also provide new property parameter CAP_CROSSBAR_INPIN_TYPE to set the crossbar input pin type which will be used in videoInput::start(int deviceID, videoDevice *VD): " if(VD->useCrossbar) { DebugPrintOut("SETUP: Checking crossbar\n"); routeCrossbar(&VD->pCaptureGraph, &VD->pVideoInputFilter, VD->connection, CAPTURE_MODE); } " And at last ,fixed one issue for function setSizeAndSubtype, added code pVih->rcSource.top = pVih->rcSource.left = pVih->rcTarget.top =pVih->rcTarget.left=0; pVih->rcSource.right = pVih->rcTarget.right= attemptWidth; pVih->rcSource.bottom = pVih->rcTarget.bottom = attemptHeight; without these code , rcSource and rcTarget will keeping use default resolution and cause fail in hr = VD->streamConf->SetFormat(VD->pAmMediaType) and cannot find suitable MediaType. Tested with python3 and mfc (Avermedia cv710) Python3 code: import cv2 print("test cv") cap=cv2.VideoCapture(0) cap.set(5,60) cap.set(3,1920) cap.set(4,1080) cap.set(31,6) ret,img=cap.read() cv2.namedWindow("cap",cv2.WINDOW_NORMAL) cv2.resizeWindow("cap",960,640); while True: ret,img=cap.read() if ret==False: continue cv2.imshow("cap",img) if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() MFC code: void CcvtestDlg::OnBnClickedButton1() { VideoCapture cap(0); cap.set(CAP_PROP_FRAME_WIDTH, 1920); cap.set(CAP_PROP_FRAME_HEIGHT, 1080); cap.set(CAP_CROSSBAR_INPIN_TYPE , 6); Mat img; namedWindow("test", WINDOW_NORMAL); resizeWindow("test", 960, 640); while (1) { if (cap.read(img)) { imshow("test", img); if ('q' ==waitKey(1)) break; } } destroyAllWindows(); cap.release(); } * Update cap_dshow.cpp * Update videoio.hpp move enum value of CAP_CROSSBAR_INPIN_TYPE to the end of list * Update videoio.hpp * Update cap_dshow.cpp removed trailing whitespace * Update test_camera.cpp Add test for capture device using PhysConn_Video_SerialDigital as crossbar input pin * Update test_camera.cpp Correction of misunderstanding about how to add test case.
2018-10-26 00:41:37 +08:00
//Following test if for capture device using PhysConn_Video_SerialDigital as crossbar input pin
TEST(DISABLED_VideoIO_Camera, dshow_avermedia_capture)
{
VideoCapture capture(0);
ASSERT_TRUE(capture.isOpened());
capture.set(CAP_CROSSBAR_INPIN_TYPE, 6);
std::cout << "Camera 0 via " << capture.getBackendName() << " backend" << std::endl;
std::cout << "Frame width: " << capture.get(CAP_PROP_FRAME_WIDTH) << std::endl;
std::cout << " height: " << capture.get(CAP_PROP_FRAME_HEIGHT) << std::endl;
std::cout << "Capturing FPS: " << capture.get(CAP_PROP_FPS) << std::endl;
const int N = 100;
Mat frame;
int64 time0 = cv::getTickCount();
for (int i = 0; i < N; i++)
{
SCOPED_TRACE(cv::format("frame=%d", i));
capture >> frame;
ASSERT_FALSE(frame.empty());
EXPECT_GT(cvtest::norm(frame, NORM_INF), 0) << "Complete black image has been received";
}
int64 time1 = cv::getTickCount();
printf("Processed %d frames on %.2f FPS\n", N, (N * cv::getTickFrequency()) / (time1 - time0 + 1));
capture.release();
}
}} // namespace