2017-09-13 1 views
1

Ich arbeite an der Erkennung von ARUCO Markern auf einer industriellen Automatisierungstechnologie C2 Kameras, die Laser-Streifen in Triangulationsscannern erkennen, aber auch Bilder aufnehmen können. Mein Problem ist, dass die gleichen Markierungen unabhängig von der Kamera, die ich benutze, mit Ausnahme der oben erwähnten erkannt werden. Minimal Arbeitsbeispiel für meinen Code ist unten:OpenCV Aruco Marker werden an Industriekameras nicht erkannt

#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; 
} 

Sample image from camera:

Das Problem ist, dass Marker erkannt werden, aber aus unbekannten Gründen sie abgelehnt:

Rejected markers

verwende ich OpenCV 3.1 .

Antwort

0

Das Problem ist gelöst. Ich muss das Bild spiegeln und die Markierungen werden nun einwandfrei erkannt.

Verwandte Themen