1
산업 자동화 기술에서 ARUCO 마커를 감지하고 있습니다 C2 카메라는 삼각 측량 스캐너에서 레이저 프린지를 감지하도록 설계되었지만 이미지도 캡처 할 수 있습니다. 내 문제는 이전에 언급 한 카메라를 제외하고 내가 사용하는 카메라에 관계없이 동일한 마커가 감지된다는 것입니다. 내 코드의 최소한의 작업 예는 다음과 같습니다 :OpenCV Aruco 마커는 산업용 카메라에서 인식되지 않습니다
#include <opencv2/highgui.hpp>
#include <opencv2/aruco/charuco.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[]) {
int squaresX = 10;
int squaresY = 7;
float squareLength = 28;
float markerLength = 19;
int dictionaryId = 6;
bool showRejected = true;
bool refindStrategy = true;
Ptr<aruco::DetectorParameters> detectorParams = aruco::DetectorParameters::create();
Ptr<aruco::Dictionary> dictionary =
aruco::getPredefinedDictionary(aruco::PREDEFINED_DICTIONARY_NAME(dictionaryId));
// create charuco board object
Ptr<aruco::CharucoBoard> charucoboard =
aruco::CharucoBoard::create(squaresX, squaresY, squareLength, markerLength, dictionary);
Ptr<aruco::Board> board = charucoboard.staticCast<aruco::Board>();
Mat image = imread("C:\\Users\\Piotrek\\Desktop\\calib\\022.jpg"), imageCopy;
vector<int> markerIds, charucoIds;
vector< vector<Point2f> > markerCorners, rejectedMarkers;
vector<Point2f> charucoCorners;
// detect markers
aruco::detectMarkers(image, dictionary, markerCorners, markerIds, detectorParams,
rejectedMarkers);
image.copyTo(imageCopy);
if (markerIds.size() > 0) {
aruco::drawDetectedMarkers(imageCopy, markerCorners);
}
if (showRejected && rejectedMarkers.size() > 0)
aruco::drawDetectedMarkers(imageCopy, rejectedMarkers, noArray(), Scalar(100, 0, 255));
//display results
imshow("out", imageCopy);
waitKey(0);
return 0;
}
문제는 마커가 발견되어 있지만 알 수없는 이유로 그들은 거부 :
내가 OpenCV의 3.1 사용 .