本文整理汇总了C++中MarkerDetector::detect方法的典型用法代码示例。如果您正苦于以下问题:C++ MarkerDetector::detect方法的具体用法?C++ MarkerDetector::detect怎么用?C++ MarkerDetector::detect使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MarkerDetector
的用法示例。
在下文中一共展示了MarkerDetector::detect方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(int argc,char **argv)
{
try
{
if (argc!=2) {
cerr<<"Usage: in.jpg "<<endl;
return -1;
}
MarkerDetector MDetector;
vector<Marker> Markers;
//read the input image
cv::Mat InImage;
InImage=cv::imread(argv[1]);
//Ok, let's detect
MDetector.detect(InImage,Markers);
//for each marker, draw info and its boundaries in the image
for (unsigned int i=0; i<Markers.size(); i++) {
cout<<Markers[i]<<endl;
cout<<Markers[0][0].x<<endl;
cout<<Markers[0].Tvec.at<float>(0,0)<<endl; //x value of Tvec and Markers[0].Tvec then whole Tvec will be printed
Markers[i].draw(InImage,Scalar(0,0,255),2);
}
cv::imshow("in",InImage);
cv::waitKey(0);//wait for key to be pressed
} catch (std::exception &ex)
{
cout<<"Exception :"<<ex.what()<<endl;
}
return 0;
}
示例2: circle
JNIEXPORT void JNICALL
Java_cz_email_michalchomo_cardboardkeyboard_MainActivity_FindFeatures(JNIEnv *env, jobject instance,
jlong matAddrGr,
jlong matAddrRgba) {
Mat &mGr = *(Mat *) matAddrGr;
Mat &mRgb = *(Mat *) matAddrRgba;
//vector<KeyPoint> v;
MarkerDetector markerDetector;
vector<Marker> markers;
markerDetector.detect(mGr, markers);
for (unsigned int i=0; i < markers.size(); i++) {
cout << markers[i] << endl;
markers[i].draw(mRgb,Scalar(0,0,255),2);
}
/*Ptr<FeatureDetector> detector = FastFeatureDetector::create(50);
detector->detect(mGr, v);
for (unsigned int i = 0; i < v.size(); i++) {
const KeyPoint &kp = v[i];
circle(mRgb, Point(kp.pt.x, kp.pt.y), 10, Scalar(255, 0, 0, 255));
}*/
}
示例3: cvTackBarEvents
void cvTackBarEvents(int pos,void*)
{
if (iThresParam1<3) iThresParam1=3;
if (iThresParam1%2!=1) iThresParam1++;
if (ThresParam2<1) ThresParam2=1;
ThresParam1=iThresParam1;
ThresParam2=iThresParam2;
MDetector.setThresholdParams(ThresParam1,ThresParam2);
//recompute
MDetector.detect(TheInputImage,TheMarkers,TheCameraParameters);
TheInputImage.copyTo(TheInputImageCopy);
for (unsigned int i=0;i<TheMarkers.size();i++) TheMarkers[i].draw(TheInputImageCopy,Scalar(0,0,255),1);
//print other rectangles that contains no valid markers
/*for (unsigned int i=0;i<MDetector.getCandidates().size();i++) {
aruco::Marker m( MDetector.getCandidates()[i],999);
m.draw(TheInputImageCopy,cv::Scalar(255,0,0));
}*/
//draw a 3d cube in each marker if there is 3d info
if (TheCameraParameters.isValid())
for (unsigned int i=0;i<TheMarkers.size();i++)
CvDrawingUtils::draw3dCube(TheInputImageCopy,TheMarkers[i],TheCameraParameters);
cv::imshow("in",TheInputImageCopy);
cv::imshow("thres",MDetector.getThresholdedImage());
}
示例4: cvTackBarEvents
void cvTackBarEvents(int pos, void*)
{
(void)(pos);
if (iThresParam1 < 3)
iThresParam1 = 3;
if (iThresParam1 % 2 != 1)
iThresParam1++;
if (ThresParam2 < 1)
ThresParam2 = 1;
ThresParam1 = iThresParam1;
ThresParam2 = iThresParam2;
TheMarkerDetector.setThresholdParams(ThresParam1, ThresParam2);
// detect, print, get pose, and print
// detect
vector<aruco::Marker> detected_markers = TheMarkerDetector.detect(TheInputImage);
// print the markers detected that belongs to the markerset
for (auto idx : TheMarkerMapConfig.getIndices(detected_markers))
detected_markers[idx].draw(TheInputImageCopy, Scalar(0, 0, 255), 2);
// detect 3d info if possible
if (TheMSPoseTracker.isValid())
{
TheMSPoseTracker.estimatePose(detected_markers);
aruco::CvDrawingUtils::draw3dAxis(TheInputImageCopy, TheCameraParameters, TheMSPoseTracker.getRvec(),
TheMSPoseTracker.getTvec(), TheMarkerMapConfig[0].getMarkerSize() * 2);
}
cv::imshow("in", TheInputImageCopy);
cv::imshow("thres", TheMarkerDetector.getThresholdedImage());
}
示例5: vIdle
void vIdle() {
if (TheCaptureFlag) {
// capture image
TheVideoCapturer.grab();
TheVideoCapturer.retrieve(TheInputImage);
TheUndInputImage.create(TheInputImage.size(), CV_8UC3);
// by deafult, opencv works in BGR, so we must convert to RGB because OpenGL in windows preffer
cv::cvtColor(TheInputImage, TheInputImage, CV_BGR2RGB);
// remove distorion in image
cv::undistort(TheInputImage, TheUndInputImage, TheCameraParams.CameraMatrix,
TheCameraParams.Distorsion);
// detect markers
MDetector.detect(TheUndInputImage, TheMarkers);
// Detection of the board
TheBoardDetected.second = TheBoardDetector.detect(
TheMarkers, TheBoardConfig, TheBoardDetected.first, TheCameraParams, TheMarkerSize);
// chekc the speed by calculating the mean speed of all iterations
// resize the image to the size of the GL window
cv::resize(TheUndInputImage, TheResizedImage, TheGlWindowSize);
// create mask. It is a syntetic mask consisting of a simple rectangle, just to show a example of
// opengl with mask
TheMask = createSyntheticMask(TheResizedImage); // lets create with the same size of the resized
// image, i.e. the size of the opengl window
}
glutPostRedisplay();
}
示例6: main
int main(int argc,char **argv)
{
try
{
if(argc<3) {cerr<<"Usage: image boardConfig.yml [cameraParams.yml] [markerSize] [outImage]"<<endl;exit(0);}
aruco::CameraParameters CamParam;
MarkerDetector MDetector;
vector<aruco::Marker> Markers;
float MarkerSize=-1;
BoardConfiguration TheBoardConfig;
BoardDetector TheBoardDetector;
Board TheBoardDetected;
cv::Mat InImage=cv::imread(argv[1]);
TheBoardConfig.readFromFile(argv[2]);
if (argc>=4) {
CamParam.readFromXMLFile(argv[3]);
//resizes the parameters to fit the size of the input image
CamParam.resize( InImage.size());
}
if (argc>=5)
MarkerSize=atof(argv[4]);
cv::namedWindow("in",1);
MDetector.detect(InImage,Markers);//detect markers without computing R and T information
//Detection of the board
float probDetect=TheBoardDetector.detect( Markers, TheBoardConfig,TheBoardDetected, CamParam,MarkerSize);
//for each marker, draw info and its boundaries in the image
for(unsigned int i=0;i<Markers.size();i++){
cout<<Markers[i]<<endl;
Markers[i].draw(InImage,Scalar(0,0,255),2);
}
//draw a 3d cube in each marker if there is 3d info
if ( CamParam.isValid()){
for(unsigned int i=0;i<Markers.size();i++){
CvDrawingUtils::draw3dCube(InImage,Markers[i],CamParam);
CvDrawingUtils::draw3dAxis(InImage,Markers[i],CamParam);
}
CvDrawingUtils::draw3dAxis(InImage,TheBoardDetected,CamParam);
cout<<TheBoardDetected.Rvec<<" "<<TheBoardDetected.Tvec<<endl;
}
//draw board axis
//show input with augmented information
cv::imshow("in",InImage);
cv::waitKey(0);//wait for key to be pressed
if(argc>=6) cv::imwrite(argv[5],InImage);
}catch(std::exception &ex)
{
cout<<"Exception :"<<ex.what()<<endl;
}
}
示例7: imageCallback
//This function is called everytime a new image is published
void imageCallback(const sensor_msgs::ImageConstPtr& original_image)
{
//Convert from the ROS image message to a CvImage suitable for working with OpenCV for processing
cv_bridge::CvImageConstPtr cv_ptr;
try
{
//Always copy, returning a mutable CvImage
//OpenCV expects color images to use BGR channel order.
//cv_ptr = cv_bridge::toCvShare(original_image, "");
cv_ptr = cv_bridge::toCvCopy(original_image, enc::RGB8);
}
catch (cv_bridge::Exception& e)
{
//if there is an error during conversion, display it
ROS_ERROR("main.cpp::cv_bridge exception: %s", e.what());
return;
}
try
{
MarkerDetector MDetector;
vector<Marker> Markers;
//read the input image
cv::Mat InImage;
InImage = cv_ptr->image;
//Ok, let's detect
MDetector.detect(InImage,Markers);
//for each marker, draw info and its boundaries in the image
for (unsigned int i=0;i<Markers.size();i++) {
//cout<<Markers[i]<<endl;
Markers[i].draw(InImage,Scalar(0,0,255),2);
}
cv::imshow(WINDOW,InImage);
//Add some delay in milliseconds
cv::waitKey(3);
} catch (std::exception &ex)
{
ROS_ERROR("main.cpp::aruco exception: %s", ex.what());
}
/**
* The publish() function is how you send messages. The parameter
* is the message object. The type of this object must agree with the type
* given as a template parameter to the advertise<>() call, as was done
* in the constructor in main().
*/
//Convert the CvImage to a ROS image message and publish it on the "camera/image_processed" topic.
pub.publish(cv_ptr->toImageMsg());
}
示例8: cvTackBarEvents
void cvTackBarEvents(int pos, void*)
{
(void)(pos);
if (iThresParam1 < 3)
iThresParam1 = 3;
if (iThresParam1 % 2 != 1)
iThresParam1++;
if (iThresParam1 < 1)
iThresParam1 = 1;
MDetector.setThresholdParams(iThresParam1, iThresParam2);
if (iEnclosedMarkers){
auto params=MDetector.getParams();
params._doErosion=true;
params._cornerMethod=aruco::MarkerDetector::SUBPIX;
MDetector.setParams(params);
}
else{
auto params=MDetector.getParams();
params._doErosion=false;
params._cornerMethod=aruco::MarkerDetector::LINES;
MDetector.setParams(params);
}
MDetector.setDictionary(dictionaryString,float(iCorrectionRate)/10. ); // sets the dictionary to be employed (ARUCO,APRILTAGS,ARTOOLKIT,etc)
// recompute
MDetector.detect(TheInputImage, TheMarkers, TheCameraParameters);
TheInputImage.copyTo(TheInputImageCopy);
if (iShowAllCandidates){
auto candidates=MDetector.getCandidates();
for(auto cand:candidates)
Marker(cand,-1).draw(TheInputImageCopy, Scalar(255, 0, 255));
}
for (unsigned int i = 0; i < TheMarkers.size(); i++)
TheMarkers[i].draw(TheInputImageCopy, Scalar(0, 0, 255));
// draw a 3d cube in each marker if there is 3d info
if (TheCameraParameters.isValid())
for (unsigned int i = 0; i < TheMarkers.size(); i++)
CvDrawingUtils::draw3dCube(TheInputImageCopy, TheMarkers[i], TheCameraParameters);
cv::imshow("in", resize(TheInputImageCopy, 1280));
cv::imshow("thres", resize(MDetector.getThresholdedImage(), 1280));
}
示例9: vIdle
void vIdle()
{
if (TheCaptureFlag) {
//capture image
TheVideoCapturer.grab();
TheVideoCapturer.retrieve( TheInputImage);
TheUndInputImage.create(TheInputImage.size(),CV_8UC3);
//transform color that by default is BGR to RGB because windows systems do not allow reading BGR images with opengl properly
cv::cvtColor(TheInputImage,TheInputImage,CV_BGR2RGB);
//remove distorion in image
cv::undistort(TheInputImage,TheUndInputImage, TheCameraParams.CameraMatrix, TheCameraParams.Distorsion);
//detect markers
PPDetector.detect(TheUndInputImage,TheMarkers, TheCameraParams.CameraMatrix,Mat(),TheMarkerSize,false);
//resize the image to the size of the GL window
cv::resize(TheUndInputImage,TheResizedImage,TheGlWindowSize);
}
glutPostRedisplay();
}
示例10: vIdle
/*!
*
*/
static void vIdle()
{
if (capture)
{
//capture image
vCapturer.grab();
vCapturer.retrieve( inImg);
undImg.create(inImg.size(),CV_8UC3);
//transform color that by default is BGR to RGB because windows systems do not allow reading
//BGR images with opengl properly
// cv::cvtColor(inImg,inImg,CV_BGR2RGB);
//remove distorion in image
cv::undistort(inImg,undImg, camParams.getCamMatrix(), camParams.getDistor());
//detect markers
mDetector.detect(undImg,markers, camParams.getCamMatrix(),Mat(),msiz->dval[0]);
//resize the image to the size of the GL window
cv::resize(undImg,resImg,glSize);
}
glutPostRedisplay();
}
示例11: vIdle
void vIdle()
{
if (TheCaptureFlag) {
//capture image
TheVideoCapturer.grab();
TheVideoCapturer.retrieve( TheInputImage);
TheUndInputImage.create(TheInputImage.size(),CV_8UC3);
//by deafult, opencv works in BGR, so we must convert to RGB because OpenGL in windows preffer
cv::cvtColor(TheInputImage,TheInputImage,CV_BGR2RGB);
//remove distorion in image
cv::undistort(TheInputImage,TheUndInputImage, TheCameraParams.CameraMatrix,TheCameraParams.Distorsion);
//detect markers
MDetector.detect(TheUndInputImage,TheMarkers,TheCameraParams.CameraMatrix,Mat(),TheMarkerSize);
//Detection of the board
TheBoardDetected.second=TheBoardDetector.detect( TheMarkers, TheBoardConfig,TheBoardDetected.first, TheCameraParams,TheMarkerSize);
//chekc the speed by calculating the mean speed of all iterations
//resize the image to the size of the GL window
cv::resize(TheUndInputImage,TheResizedImage,TheGlWindowSize);
}
glutPostRedisplay();
}
示例12: vIdle
/*!
*
*/
static void vIdle()
{
if (capture)
{
//capture image
vCapturer >> inImg;
assert(inImg.empty()==false);
undImg.create(inImg.size(),CV_8UC3);
//by default, opencv works in BGR, so we must convert to RGB because OpenGL in windows prefer
// cv::cvtColor(inImg,inImg,CV_BGR2RGB);
//remove distortion in image
cv::undistort(inImg,undImg, camParams.getCamMatrix(),camParams.getDistor());
//detect markers
mDetector.detect(undImg,markers,camParams.getCamMatrix(),Mat(),msiz->dval[0]);
//Detection of the board
board.second=bDetector.detect(markers, boardConfig,board.first, camParams,msiz->dval[0]);
//check the speed by calculating the mean speed of all iterations
//resize the image to the size of the GL window
cv::resize(undImg, resImg, glSize);
}
glutPostRedisplay();
}
示例13:
JNIEXPORT void JNICALL Java_wrapper_MarkerDetector_Jdetect(JNIEnv * env, jobject obj, jlong img, jobject markers, jobject camParams, jfloat markerSizeMeters){
MarkerDetector *inst = getHandle<MarkerDetector>(env, obj);
// use the Array list
jclass ArrayList_class = env->FindClass( "java/util/ArrayList" );
jclass Marker_class = env->FindClass("wrapper/Marker");
jmethodID Add_method = env->GetMethodID(ArrayList_class,"add", "(Ljava/lang/Object;)Z");
jmethodID Get_method = env->GetMethodID(ArrayList_class,"get", "(I)Ljava/lang/Object;");
jmethodID Marker_Constructor_method = env->GetMethodID(Marker_class,"<init>","(J)V");
jmethodID Marker_CopyConstructor_method = env->GetMethodID(Marker_class,"<init>","(Lwrapper/Marker;)V");
jmethodID Marker_EmptyConstructor_method = env->GetMethodID(Marker_class,"<init>","()V");
jmethodID Marker_SetNativeHandle_method = env->GetMethodID(Marker_class,"setNativeHandle","(J)V");
cv::Mat* inMat = (cv::Mat*)img;
aruco::CameraParameters *camParam = getHandle<CameraParameters>(env, camParams);
std::vector <Marker> vMarkers;
inst->detect(*inMat, vMarkers, *camParam, markerSizeMeters);
jobject newMarkers[vMarkers.size()];
for (int i=0; i< vMarkers.size(); i++) {
Marker * markPtr = &vMarkers[i];
newMarkers[i] = env->NewObject(Marker_class,Marker_Constructor_method,(long) markPtr);
env->CallBooleanMethod(markers,Add_method,newMarkers[i]);
env->DeleteLocalRef(newMarkers[i]);
}
env->DeleteLocalRef(ArrayList_class);
env->DeleteLocalRef(Marker_class);
}
示例14: main
int main(int argc, char **argv) {
try {
if (argc < 2) {
cerr << "Usage: (in.jpg|in.avi) [cameraParams.yml] [markerSize] [outImage]" << endl;
exit(0);
}
aruco::CameraParameters CamParam;
MarkerDetector MDetector;
vector< Marker > Markers;
float MarkerSize = -1;
// read the input image
cv::Mat InImage;
// try opening first as video
VideoCapture vreader(argv[1]);
if (vreader.isOpened()) {
vreader.grab();
vreader.retrieve(InImage);
} else {
InImage = cv::imread(argv[1]);
}
// at this point, we should have the image in InImage
// if empty, exit
if (InImage.total() == 0) {
cerr << "Could not open input" << endl;
return 0;
}
// read camera parameters if specifed
if (argc >= 3) {
CamParam.readFromXMLFile(argv[2]);
// resizes the parameters to fit the size of the input image
CamParam.resize(InImage.size());
}
// read marker size if specified
if (argc >= 4)
MarkerSize = atof(argv[3]);
cv::namedWindow("in", 1);
// Ok, let's detect
MDetector.detect(InImage, Markers, CamParam, MarkerSize);
// for each marker, draw info and its boundaries in the image
for (unsigned int i = 0; i < Markers.size(); i++) {
cout << Markers[i] << endl;
Markers[i].draw(InImage, Scalar(0, 0, 255), 2);
}
// draw a 3d cube in each marker if there is 3d info
if (CamParam.isValid() && MarkerSize != -1)
for (unsigned int i = 0; i < Markers.size(); i++) {
CvDrawingUtils::draw3dCube(InImage, Markers[i], CamParam);
}
// show input with augmented information
cv::imshow("in", InImage);
// show also the internal image resulting from the threshold operation
cv::imshow("thes", MDetector.getThresholdedImage());
cv::waitKey(0); // wait for key to be pressed
if (argc >= 5)
cv::imwrite(argv[4], InImage);
} catch (std::exception &ex)
{
cout << "Exception :" << ex.what() << endl;
}
}
示例15: main
int main(int argc,char **argv)
{
try
{
if (readArguments (argc,argv)==false) {
return 0;
}
//parse arguments
;
//read from camera or from file
if (TheInputVideo=="live") {
TheVideoCapturer.open(0);
waitTime=10;
}
else TheVideoCapturer.open(TheInputVideo);
//check video is open
if (!TheVideoCapturer.isOpened()) {
cerr<<"Could not open video"<<endl;
return -1;
}
//read first image to get the dimensions
TheVideoCapturer>>TheInputImage;
//read camera parameters if passed
if (TheIntrinsicFile!="") {
TheCameraParameters.readFromXMLFile(TheIntrinsicFile);
TheCameraParameters.resize(TheInputImage.size());
}
//Configure other parameters
if (ThePyrDownLevel>0)
MDetector.pyrDown(ThePyrDownLevel);
//Create gui
MDetector.getThresholdParams( ThresParam1,ThresParam2);
MDetector.setCornerRefinementMethod(MarkerDetector::LINES);
/*
cv::namedWindow("thres",1);
cv::namedWindow("in",1);
iThresParam1=ThresParam1;
iThresParam2=ThresParam2;
cv::createTrackbar("ThresParam1", "in",&iThresParam1, 13, cvTackBarEvents);
cv::createTrackbar("ThresParam2", "in",&iThresParam2, 13, cvTackBarEvents);
*/
char key=0;
int index=0;
//capture until press ESC or until the end of the video
while ( key!=27 && TheVideoCapturer.grab() ) // && index <= 50)
{
TheVideoCapturer.retrieve( TheInputImage);
//copy image
index++; //number of images captured
double tick = (double)getTickCount();//for checking the speed
//Detection of markers in the image passed
MDetector.detect(TheInputImage,TheMarkers,TheCameraParameters,TheMarkerSize);
//chekc the speed by calculating the mean speed of all iterations
AvrgTime.first+=((double)getTickCount()-tick)/getTickFrequency();
AvrgTime.second++;
//cout<<"Time detection="<<1000*AvrgTime.first/AvrgTime.second<<" milliseconds"<<endl;
//print marker info and draw the markers in image
TheInputImage.copyTo(TheInputImageCopy);
for (unsigned int i=0;i<TheMarkers.size();i++) {
if (AllMarkers.count( TheMarkers[i].id ) == 0)
AllMarkers[TheMarkers[i].id] = map<int,Marker>();
AllMarkers[TheMarkers[i].id][index] = TheMarkers[i];
cout<<index<<endl;
cout<<TheMarkers[i]<<endl;
TheMarkers[i].draw(TheInputImageCopy,Scalar(0,0,255),1);
}
//print other rectangles that contains no valid markers
/** for (unsigned int i=0;i<MDetector.getCandidates().size();i++) {
aruco::Marker m( MDetector.getCandidates()[i],999);
m.draw(TheInputImageCopy,cv::Scalar(255,0,0));
}*/
//draw a 3d cube in each marker if there is 3d info
if ( TheCameraParameters.isValid())
for (unsigned int i=0;i<TheMarkers.size();i++) {
CvDrawingUtils::draw3dCube(TheInputImageCopy,TheMarkers[i],TheCameraParameters);
CvDrawingUtils::draw3dAxis(TheInputImageCopy,TheMarkers[i],TheCameraParameters);
}
//DONE! Easy, right?
cout<<endl<<endl<<endl;
//show input with augmented information and the thresholded image
//cv::imshow("in",TheInputImageCopy);
//cv::imshow("thres",MDetector.getThresholdedImage());
//key=cv::waitKey(waitTime);//wait for key to be pressed
}
//.........这里部分代码省略.........