0

あなたが私を助けてくれることを願っています。ウィンドウの角を見つけるために Aruco マーカーを使用しようとしています。そのため、各コーナーにマーカーを追加しました。しかし、マーカーを検出しようとすると、それらは見つかりません。スマートフォンで写真を撮り、写真のマーカーを検出しようとすると、機能します。最小限の作業コードの例を次に示します。

#include <opencv2/opencv.hpp>
#include <stdlib.h>
#include <string> 
#include <opencv2/aruco.hpp>
using namespace cv;
using namespace std;
using namespace aruco;

Dictionary dictionary;
int markerSize = 200;
vector<int> ids;
vector< vector<Point2f> > corners;


Mat addMarkertoImage(const Mat image){
    Mat retImage, marker0;
    image.copyTo(retImage);
    drawMarker(dictionary, 0, markerSize, marker0, 1);

    unsigned char value;

    //Add marker to top left corner
    for(int i = 0; i<marker0.rows; i++)
      for(int j = 0; j<marker0.cols; j++){
        value = marker0.at<uchar>(i,j);
        Vec3b colorValue = Vec3b(value, value, value);
        retImage.at<Vec3b>(i,j) = colorValue;} 
 return retImage;
 }


int main(){
        Mat image, image_marker;
dictionary = getPredefinedDictionary(cv::aruco::DICT_6X6_250); 
image = imread( "bild.jpg", 1 );
image_marker = addMarkertoImage(image);
detectMarkers(image_marker, dictionary, corners, ids);
drawDetectedMarkers(image_marker, corners, ids);
    imshow("Display Image", image_marker);
  waitKey(0);
  return 0;
}

任意のアイデア、なぜこれが機能しないのですか? しかし、iPhone カメラで撮影した写真は機能していますか?

4

1 に答える 1

1

その間、私は自分で問題を解決しました。問題は、デフォルトの構成では、マーカーが大きすぎて検出されなかったことです。したがって、dectorparamenters を更新するだけで、質問の例が機能しました。

編集: ここで変更されたパラメーターについて尋ねられたため。変更を加えて次のコードを追加しました。

ImageFinder::ImageFinder() {
    //initalize dictionary with markers....
    dictionary = getPredefinedDictionary(cv::aruco::DICT_6X6_250);
    dp = new DetectorParameters();
    dp->minDistanceToBorder = 0;
    dp->adaptiveThreshWinSizeMax = 400;
}
于 2016-06-16T12:07:26.250 に答える