Ask Your Question

Revision history [back]

you can do like this :

#include <opencv2/opencv.hpp> 
#include <iostream>
using namespace std;
using namespace cv;

#ifdef USE_VTK

void  KeyboardViz3d(const viz::KeyboardEvent &w, void *t)
{
    viz::Viz3d *fen=(viz::Viz3d*)t;
   if (w.action)
       cout << "you pressed "<< w.code<< " in viz window "<<fen->getWindowName()<<"\n";
}

int main (int argc,char **argv)
{

Mat img = imread("f:/lib/opencv/samples/data/lena.jpg", IMREAD_COLOR);
Mat imgh;
cvtColor(img,imgh,CV_BGR2GRAY);

viz::Viz3d fen3D("Mon Image");
fen3D.registerKeyboardCallback(KeyboardViz3d,&fen3D);

int nbF=0;
vector<Point3d> cloud;
vector<int> polygon;
vector<Vec3b> couleur;
double k=1;
int nbPix=0;
for (int i = 1; i<img.rows; i++)
    for (int j = 1; j < img.cols; j++)
    {
        Vec3d p1(j / k, i / k, imgh.at<uchar>(i, j)/k);
        Vec3d p2((j-1) / k, i / k, imgh.at<uchar>(i, j-1) / k);
        Vec3d p3(j / k, (i - 1) / k, imgh.at<uchar>(i-1, j) / k);
        Vec3d p4((j-1) / k, (i - 1) / k, imgh.at<uchar>(i-1, j-1) / k);
        cloud.push_back(p1);
        cloud.push_back(p2);
        cloud.push_back(p3);
        cloud.push_back(p4);
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        polygon.push_back(3);
        polygon.push_back(nbPix);
        polygon.push_back(nbPix + 1);
        polygon.push_back(nbPix + 2);
        polygon.push_back(3);
        polygon.push_back(nbPix + 2);
        polygon.push_back(nbPix + 3);
        polygon.push_back(nbPix);
        nbPix+=4;
    }
viz::WMesh grille(cloud,polygon,couleur);
fen3D.showWidget("I3d", grille);
fen3D.spin();

return 0;
}

#else

int main(int argc, char **argv)
{
cout << " you need VIZ module\n";
return 0;
}
#endif

you can do like this :

#include <opencv2/opencv.hpp> 
#include <iostream>
using namespace std;
using namespace cv;

#ifdef USE_VTK

void  KeyboardViz3d(const viz::KeyboardEvent &w, void *t)
{
    viz::Viz3d *fen=(viz::Viz3d*)t;
   if (w.action)
       cout << "you pressed "<< w.code<< w.code<<" = "<<w.symbol<< " in viz window "<<fen->getWindowName()<<"\n";
}

int main (int argc,char **argv)
{

Mat img = imread("f:/lib/opencv/samples/data/lena.jpg", IMREAD_COLOR);
Mat imgh;
cvtColor(img,imgh,CV_BGR2GRAY);

viz::Viz3d fen3D("Mon Image");
fen3D.registerKeyboardCallback(KeyboardViz3d,&fen3D);

int nbF=0;
vector<Point3d> cloud;
vector<int> polygon;
vector<Vec3b> couleur;
double k=1;
int nbPix=0;
for (int i = 1; i<img.rows; i++)
    for (int j = 1; j < img.cols; j++)
    {
        Vec3d p1(j / k, i / k, imgh.at<uchar>(i, j)/k);
        Vec3d p2((j-1) / k, i / k, imgh.at<uchar>(i, j-1) / k);
        Vec3d p3(j / k, (i - 1) / k, imgh.at<uchar>(i-1, j) / k);
        Vec3d p4((j-1) / k, (i - 1) / k, imgh.at<uchar>(i-1, j-1) / k);
        cloud.push_back(p1);
        cloud.push_back(p2);
        cloud.push_back(p3);
        cloud.push_back(p4);
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        couleur.push_back(img.at<Vec3b>(i, j));
        polygon.push_back(3);
        polygon.push_back(nbPix);
        polygon.push_back(nbPix + 1);
        polygon.push_back(nbPix + 2);
        polygon.push_back(3);
        polygon.push_back(nbPix + 2);
        polygon.push_back(nbPix + 3);
        polygon.push_back(nbPix);
        nbPix+=4;
    }
viz::WMesh grille(cloud,polygon,couleur);
fen3D.showWidget("I3d", grille);
fen3D.spin();

return 0;
}

#else

int main(int argc, char **argv)
{
cout << " you need VIZ module\n";
return 0;
}
#endif