26 #include <opencv2/imgproc/imgproc.hpp>
34 #include <Calibration/Calibration.h>
45 return "WebCamImageProvider";
48 std::vector<ImageDimension>
51 std::vector<ImageDimension> supportedVideoResolutions;
52 const ImageDimension CommonResolutions[] = {ImageDimension(320, 240),
53 ImageDimension(640, 480),
54 ImageDimension(800, 600),
55 ImageDimension(768, 576),
56 ImageDimension(1024, 768),
57 ImageDimension(1280, 720),
58 ImageDimension(1280, 960),
59 ImageDimension(1280, 1024),
60 ImageDimension(1600, 1200),
61 ImageDimension(1920, 1080),
62 ImageDimension(1920, 1200),
63 ImageDimension(2560, 1440),
64 ImageDimension(3849, 2160)};
65 int nbTests =
sizeof(CommonResolutions) /
sizeof(CommonResolutions[0]);
67 for (
int i = 0; i < nbTests; i++)
69 ImageDimension test = CommonResolutions[i];
72 camera.set(cv::CAP_PROP_FRAME_WIDTH, test.width);
73 camera.set(cv::CAP_PROP_FRAME_HEIGHT, test.height);
74 camera.set(cv::CAP_PROP_AUTOFOCUS, 0);
76 double width = camera.get(cv::CAP_PROP_FRAME_WIDTH);
77 double height = camera.get(cv::CAP_PROP_FRAME_HEIGHT);
78 if (test.width == width && test.height == height)
80 supportedVideoResolutions.push_back(test);
84 return supportedVideoResolutions;
91 capturer.open(getProperty<int>(
"DeviceNumber").getValue());
95 auto dim = getProperty<ImageDimension>(
"ImageResolution").getValue();
98 auto supportedResolutions = getSupportedResolutions(capturer);
99 ARMARX_INFO <<
"Supported resolutions: " << supportedResolutions;
101 capturer.set(cv::CAP_PROP_FRAME_WIDTH, supportedResolutions.rbegin()->width);
102 capturer.set(cv::CAP_PROP_FRAME_HEIGHT, supportedResolutions.rbegin()->height);
103 ARMARX_INFO <<
"Using max resolution found for camera: "
104 << capturer.get(cv::CAP_PROP_FRAME_WIDTH) <<
"x"
105 << capturer.get(cv::CAP_PROP_FRAME_HEIGHT);
109 capturer.set(cv::CAP_PROP_FRAME_WIDTH, dim.width);
110 capturer.set(cv::CAP_PROP_FRAME_HEIGHT, dim.height);
111 ARMARX_INFO <<
"Using resolution " << capturer.get(cv::CAP_PROP_FRAME_WIDTH) <<
"x"
112 << capturer.get(cv::CAP_PROP_FRAME_HEIGHT);
115 setImageFormat(ImageDimension(capturer.get(cv::CAP_PROP_FRAME_WIDTH),
116 capturer.get(cv::CAP_PROP_FRAME_HEIGHT)),
118 visionx::eBayerPatternGr);
119 if (getProperty<float>(
"FPS").isSet())
121 setImageSyncMode(visionx::eFpsSynchronization);
122 frameRate = getProperty<float>(
"FPS").getValue();
127 setImageSyncMode(visionx::eCaptureSynchronization);
141 auto result = capturer.read(image);
143 auto tmpSharedMemoryProvider = sharedMemoryProvider;
144 if (result && tmpSharedMemoryProvider)
146 Ice::Byte* pixels =
static_cast<Ice::Byte*
>(image.data);
149 cv::cvtColor(image, image, cv::COLOR_RGB2BGR);
153 tmpSharedMemoryProvider->getScopedWriteLock());
156 memcpy(ppImageBuffers[0], pixels, image.cols * image.rows * image.channels());
182 visionx::MonocularCalibration
188 std::vector<imrec::ChannelPreferences>
193 imrec::ChannelPreferences cp;
194 cp.requiresLossless =
false;