2017-09-13 16 views
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; 
} 

Sample image from camera:

問題はマーカーが検出されたということですが、不明な理由のために、彼らが拒否されています

Rejected markers

私はOpenCVの3.1を使用します。

答えて

0

問題は解決しました。私はイメージを反転しなければなりません、そして今、マーカーは完璧に検出されます。

関連する問題