Aruco 期望什么图像编码?
What image encoding does Aruco expect?
我的应用程序接收可以具有 bayer_rggb8
编码的相机图像。我需要将这些图像转换为 bgr8
/rgb8
/mono8
吗?或者 Aruco 可以检测拜耳编码 cv::Mat
s 中的标记吗?
我正在使用 Aruco 3.0.10。下面是我正在使用的函数。
/**Detects the markers in the image passed
*
* If you provide information about the camera parameters and the size of the marker, then, the extrinsics of
* the markers are detected
*
* @param input input color image
* @param detectedMarkers output vector with the markers detected
* @param camParams Camera parameters
* @param markerSizeMeters size of the marker sides expressed in meters
* @param setYPerperdicular If set the Y axis will be perpendicular to the surface. Otherwise, it will be the
* Z axis
*/
void detect(const cv::Mat& input, std::vector<Marker>& detectedMarkers, CameraParameters camParams,
float markerSizeMeters = -1, bool setYPerperdicular = false);
我试图只给它 bayer_rggb8
编码图像,这似乎有效(它检测标记)。但我想知道这是否可行,或者我是否只是幸运地获得了我的测试图像。
左:原图,误显示为brg8。右:图像 converted/color 插值到 BGR8 并用标记注释。 (在左侧图像上检测到标记。)
它接受 CV_8UC1
灰度图像 (mono8
) 或 CV_8UC3
彩色图像 (bgr8
)。它不适用于拜耳编码垫。
如有疑问,请检查源代码。
您可以看到aruco.cpp第一个操作是将图像转换为灰度:
_convertToGrey(_image.getMat(), grey);
函数_convertToGray
接受CV_8UC1
(已经可以)或CV_8UC3
(转换为灰度):
static void _convertToGrey(InputArray _in, OutputArray _out) {
CV_Assert(_in.getMat().channels() == 1 || _in.getMat().channels() == 3);
_out.create(_in.getMat().size(), CV_8UC1);
if(_in.getMat().type() == CV_8UC3)
cvtColor(_in.getMat(), _out.getMat(), COLOR_BGR2GRAY);
else
_in.getMat().copyTo(_out);
}
我的应用程序接收可以具有 bayer_rggb8
编码的相机图像。我需要将这些图像转换为 bgr8
/rgb8
/mono8
吗?或者 Aruco 可以检测拜耳编码 cv::Mat
s 中的标记吗?
我正在使用 Aruco 3.0.10。下面是我正在使用的函数。
/**Detects the markers in the image passed
*
* If you provide information about the camera parameters and the size of the marker, then, the extrinsics of
* the markers are detected
*
* @param input input color image
* @param detectedMarkers output vector with the markers detected
* @param camParams Camera parameters
* @param markerSizeMeters size of the marker sides expressed in meters
* @param setYPerperdicular If set the Y axis will be perpendicular to the surface. Otherwise, it will be the
* Z axis
*/
void detect(const cv::Mat& input, std::vector<Marker>& detectedMarkers, CameraParameters camParams,
float markerSizeMeters = -1, bool setYPerperdicular = false);
我试图只给它 bayer_rggb8
编码图像,这似乎有效(它检测标记)。但我想知道这是否可行,或者我是否只是幸运地获得了我的测试图像。
左:原图,误显示为brg8。右:图像 converted/color 插值到 BGR8 并用标记注释。 (在左侧图像上检测到标记。)
它接受 CV_8UC1
灰度图像 (mono8
) 或 CV_8UC3
彩色图像 (bgr8
)。它不适用于拜耳编码垫。
如有疑问,请检查源代码。
您可以看到aruco.cpp第一个操作是将图像转换为灰度:
_convertToGrey(_image.getMat(), grey);
函数_convertToGray
接受CV_8UC1
(已经可以)或CV_8UC3
(转换为灰度):
static void _convertToGrey(InputArray _in, OutputArray _out) {
CV_Assert(_in.getMat().channels() == 1 || _in.getMat().channels() == 3);
_out.create(_in.getMat().size(), CV_8UC1);
if(_in.getMat().type() == CV_8UC3)
cvtColor(_in.getMat(), _out.getMat(), COLOR_BGR2GRAY);
else
_in.getMat().copyTo(_out);
}