UsTK : Ultrasound ToolKit  version 2.0.1 under development (2025-03-12)
tutorial-ultrasonix-qt-grabbing-post-scan3D.cpp
1 
3 #include <iostream>
4 #include <visp3/ustk_core/usConfig.h>
5 
6 #if (defined(USTK_HAVE_QT5) || defined(USTK_HAVE_VTK_QT)) && (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI))
7 
8 #include <QApplication>
9 #include <QStringList>
10 #include <QtCore/QThread>
11 
12 #include <visp3/ustk_grabber/usNetworkGrabberPostScan2D.h>
13 
14 #include <visp3/gui/vpDisplayGDI.h>
15 #include <visp3/gui/vpDisplayX.h>
16 
17 #include <visp3/io/vpImageIo.h>
18 
19 int main(int argc, char **argv)
20 {
21  // QT application
22  QApplication app(argc, argv);
23 
25  qtGrabber->connectToServer();
26 
27  // record option
28  if (qApp->arguments().contains(QString("--record"))) {
29  qtGrabber->activateRecording(
30  qApp->arguments().at(qApp->arguments().indexOf(QString("--record")) + 1).toStdString());
31  }
32 
33  // setting acquisition parameters
35  header.probeId = 15; // 4DC7 id = 15
36  header.slotId = 0; // top slot id = 0
37  header.imagingMode = 0; // B-mode = 0
38 
40 
41 // Prepare display
42 #if defined(VISP_HAVE_X11)
43  vpDisplayX *display = NULL;
44 #elif defined(VISP_HAVE_GDI)
45  vpDisplayGDI *display = NULL;
46 #endif
47  bool displayInit = false;
48 
49  bool captureRunning = true;
50 
51  // sending acquisition parameters
52  qtGrabber->initAcquisition(header);
53 
54  // grab a 640*480 post-scan image
55  qtGrabber->setPostScanMode(true);
56  qtGrabber->setPostScanHeigh(300);
57  qtGrabber->setPostScanWidth(400);
58 
59  // set the ultrsound depth to 140 mm
60  qtGrabber->setImageDepth(140);
61 
62  // set the 4DC7 motor on the middle frame
64  qtGrabber->setFramesPerVolume(9);
65  qtGrabber->setMotorActivation(true);
66 
67  std::cout << "send update" << std::endl;
68  qtGrabber->sendAcquisitionParameters();
69  std::cout << "end update" << std::endl;
70  qtGrabber->runAcquisition();
71 
72  std::cout << "waiting ultrasound initialisation..." << std::endl;
73 
74  // our local grabbing loop
75  do {
76  grabbedFrame = qtGrabber->acquire();
77 
78  std::cout << "MAIN THREAD received frame No : " << grabbedFrame->getFrameCount() << std::endl;
79 
80  std::cout << *grabbedFrame << std::endl;
81 
82  char buffer[400];
83  snprintf(buffer, 400, "frame%d.png", grabbedFrame->getFrameCount());
84 
85  // std::string fileName = "frame" + grabbedFrame->getFrameCount() + ".png";
86  vpImageIo::write(*grabbedFrame, buffer);
87  // init display
88  if (!displayInit && grabbedFrame->getHeight() != 0 && grabbedFrame->getWidth() != 0) {
89 #if defined(VISP_HAVE_X11)
90  display = new vpDisplayX(*grabbedFrame);
91 #elif defined(VISP_HAVE_GDI)
92  display = new vpDisplayGDI(*grabbedFrame);
93 #endif
94  displayInit = true;
95  }
96 
97  // processing display
98  if (displayInit) {
99  vpDisplay::display(*grabbedFrame);
100  vpDisplay::flush(*grabbedFrame);
101  }
102  } while (captureRunning);
103 
104  qtGrabber->stopAcquisition();
105 
106  if (displayInit) {
107  delete display;
108  }
109 
110  return 0;
111 }
112 
113 #else
114 int main()
115 {
116  std::cout << "You should intall Qt5 (with wigdets and network modules), and display X to run this tutorial"
117  << std::endl;
118  return 0;
119 }
120 
121 #endif
@ US_ANGLE_PITCH_2
4 motor steps per frame = 0.7317 degrees
Class to store additionnal informations arriving on the network with ultrasound images grabbed,...
quint32 getFrameCount() const
Specific class to grab post-scan frames from the ultrasound station on the network.
usFrameGrabbedInfo< usImagePostScan2D< unsigned char > > * acquire()
void setFramesPerVolume(int framesPerVolume)
bool initAcquisition(const usNetworkGrabber::usInitHeaderSent &header)
void setPostScanWidth(int postScanWidth)
void setPostScanHeigh(int postScanHeigh)
void setPostScanMode(bool postScanMode)
void setImageDepth(int imageDepth)
void setStepsPerFrame(usAcquisitionParameters::usMotorStep stepsPerFrame)
void setMotorActivation(bool activateMotor)
VISP_EXPORT void display(const usOrientedPlane3D &plane, const vpImage< ImageDataType > &I, const vpHomogeneousMatrix &imageMworld, double Xscale=3000, double Yscale=3000, const vpColor &color=vpColor::green)
Display usOrientedPlane3D.