Subversion Repositories seema-scanner

Rev

Rev 223 | Rev 242 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 223 Rev 226
1
#include "SMCaptureWorker.h"
1
#include "SMCaptureWorker.h"
2
 
2
 
3
#include "AlgorithmGrayCode.h"
3
#include "AlgorithmGrayCode.h"
4
#include "AlgorithmGrayCodeHorzVert.h"
4
#include "AlgorithmGrayCodeHorzVert.h"
5
#include "AlgorithmPhaseShiftTwoFreq.h"
5
#include "AlgorithmPhaseShiftTwoFreq.h"
6
#include "AlgorithmPhaseShiftTwoFreqHorzVert.h"
6
#include "AlgorithmPhaseShiftTwoFreqHorzVert.h"
7
#include "AlgorithmPhaseShiftThreeFreq.h"
7
#include "AlgorithmPhaseShiftThreeFreq.h"
8
#include "AlgorithmPhaseShiftEmbedded.h"
8
#include "AlgorithmPhaseShiftEmbedded.h"
9
#include "AlgorithmLineShift.h"
9
#include "AlgorithmLineShift.h"
10
 
10
 
11
#include <QCoreApplication>
11
#include <QCoreApplication>
12
#include <QTime>
12
#include <QTime>
13
#include <QSettings>
13
#include <QSettings>
14
#include <QtTest/QTest>
14
#include <QtTest/QTest>
15
 
15
 
16
#include "cvtools.h"
16
#include "cvtools.h"
17
 
17
 
18
void SMCaptureWorker::setup(){
18
void SMCaptureWorker::setup(){
19
 
19
 
20
    QSettings settings;
20
    QSettings settings;
21
 
21
 
22
    // Create cameras
22
    // Create cameras
23
    int iNum0 = settings.value("camera0/interfaceNumber", -1).toInt();
23
    int iNum0 = settings.value("camera0/interfaceNumber", -1).toInt();
24
    int cNum0 = settings.value("camera0/cameraNumber", -1).toInt();
24
    int cNum0 = settings.value("camera0/cameraNumber", -1).toInt();
25
    camera0.reset(CameraFactory::NewCamera(iNum0,cNum0,triggerModeSoftware));
25
    camera0.reset(CameraFactory::NewCamera(iNum0,cNum0,triggerModeSoftware));
26
 
26
 
27
    if(!camera0)
27
    if(!camera0)
28
        return;
28
        return;
29
 
29
 
30
    int iNum1 = settings.value("camera1/interfaceNumber", -1).toInt();
30
    int iNum1 = settings.value("camera1/interfaceNumber", -1).toInt();
31
    int cNum1 = settings.value("camera1/cameraNumber", -1).toInt();
31
    int cNum1 = settings.value("camera1/cameraNumber", -1).toInt();
32
    camera1.reset(CameraFactory::NewCamera(iNum1,cNum1,triggerModeSoftware));
32
    camera1.reset(CameraFactory::NewCamera(iNum1,cNum1,triggerModeSoftware));
33
 
33
 
34
    if(!camera1)
34
    if(!camera1)
35
        return;
35
        return;
36
 
36
 
37
    // Set camera settings
37
    // Set camera settings
38
    CameraSettings cameraSettings;
38
    CameraSettings cameraSettings;
39
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
39
    cameraSettings.shutter = settings.value("camera/shutter", 16.666).toFloat();
40
    cameraSettings.gain = 0.0;
40
    cameraSettings.gain = 0.0;
41
 
41
 
42
    camera0->setCameraSettings(cameraSettings);
42
    camera0->setCameraSettings(cameraSettings);
43
 
43
 
44
    camera1->setCameraSettings(cameraSettings);
44
    camera1->setCameraSettings(cameraSettings);
45
 
45
 
46
    // Start capturing
46
    // Start capturing
47
    camera0->startCapture();
47
    camera0->startCapture();
48
    camera1->startCapture();
48
    camera1->startCapture();
49
 
49
 
50
    // Create projector
50
    // Create projector
51
    //int screenNum = settings.value("projector/screenNumber", -1).toInt();
51
    //int screenNum = settings.value("projector/screenNumber", -1).toInt();
52
    int screenNum = settings.value("projector/screenNumber", 1).toInt();
52
    int screenNum = settings.value("projector/screenNumber", 1).toInt();
53
    if(screenNum != -1)
53
    if(screenNum != -1)
54
        projector.reset(new ProjectorOpenGL(screenNum));
54
        projector.reset(new ProjectorOpenGL(screenNum));
55
 
55
 
56
    // Create rotation stage
56
//    // Create rotation stage
57
    for(int i = 0; i<10; i++){
57
//    for(int i = 0; i<10; i++){
58
        try{
58
//        try{
59
            delete rotationStage.get();
59
//            delete rotationStage.get();
60
            rotationStage = std::make_shared<RotationStage>();
60
//            rotationStage = std::make_shared<RotationStage>();
61
            break;
61
//            break;
62
        }
62
//        }
63
        catch (...){
63
//        catch (...){
64
            std::cerr << "trying to setup rotation stage" << std::endl;
64
//            std::cerr << "trying to setup rotation stage" << std::endl;
65
        }
65
//        }
66
    }
66
//    }
-
 
67
    rotationStage.reset();
-
 
68
    rotationStage.reset(new RotationStage());
67
 
69
 
68
    // Create Algorithm
70
    // Create Algorithm
69
    unsigned int screenCols, screenRows;
71
    unsigned int screenCols, screenRows;
70
    projector->getScreenRes(&screenCols, &screenRows);
72
    projector->getScreenRes(&screenCols, &screenRows);
71
    codec = settings.value("algorithm", "GrayCode").toString();
73
    codec = settings.value("algorithm", "GrayCode").toString();
72
    if(codec == "GrayCode")
74
    if(codec == "GrayCode")
73
        algorithm.reset(new AlgorithmGrayCode(screenCols, screenRows));
75
        algorithm.reset(new AlgorithmGrayCode(screenCols, screenRows));
74
    else if(codec == "GrayCodeHorzVert")
76
    else if(codec == "GrayCodeHorzVert")
75
        algorithm.reset(new AlgorithmGrayCodeHorzVert(screenCols, screenRows));
77
        algorithm.reset(new AlgorithmGrayCodeHorzVert(screenCols, screenRows));
76
    else if(codec == "PhaseShiftTwoFreq")
78
    else if(codec == "PhaseShiftTwoFreq")
77
        algorithm.reset(new AlgorithmPhaseShiftTwoFreq(screenCols, screenRows));
79
        algorithm.reset(new AlgorithmPhaseShiftTwoFreq(screenCols, screenRows));
78
    else if(codec == "PhaseShiftThreeFreq")
80
    else if(codec == "PhaseShiftThreeFreq")
79
        algorithm.reset(new AlgorithmPhaseShiftThreeFreq(screenCols, screenRows));
81
        algorithm.reset(new AlgorithmPhaseShiftThreeFreq(screenCols, screenRows));
80
    else if(codec == "PhaseShiftTwoFreqHorzVert")
82
    else if(codec == "PhaseShiftTwoFreqHorzVert")
81
        algorithm.reset(new AlgorithmPhaseShiftTwoFreqHorzVert(screenCols, screenRows));
83
        algorithm.reset(new AlgorithmPhaseShiftTwoFreqHorzVert(screenCols, screenRows));
82
    else if(codec == "PhaseShiftEmbedded")
84
    else if(codec == "PhaseShiftEmbedded")
83
        algorithm.reset(new AlgorithmPhaseShiftEmbedded(screenCols, screenRows));
85
        algorithm.reset(new AlgorithmPhaseShiftEmbedded(screenCols, screenRows));
84
    else if(codec == "LineShift")
86
    else if(codec == "LineShift")
85
        algorithm.reset(new AlgorithmLineShift(screenCols, screenRows));
87
        algorithm.reset(new AlgorithmLineShift(screenCols, screenRows));
86
    else
88
    else
87
        std::cerr << "SMCaptureWorker: invalid codec " << codec.toStdString() << std::endl;
89
        std::cerr << "SMCaptureWorker: invalid codec " << codec.toStdString() << std::endl;
88
 
90
 
89
    // Upload patterns to projector/GPU
91
    // Upload patterns to projector/GPU
90
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
92
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
91
        cv::Mat pattern = algorithm->getEncodingPattern(i);
93
        cv::Mat pattern = algorithm->getEncodingPattern(i);
92
        projector->setPattern(i, pattern.ptr(), pattern.cols, pattern.rows);
94
        projector->setPattern(i, pattern.ptr(), pattern.cols, pattern.rows);
93
    }
95
    }
94
 
96
 
95
    delay = settings.value("trigger/delay", 50).toInt();
97
    delay = settings.value("trigger/delay", 50).toInt();
96
    stackingCalibration = settings.value("stacking/calibration", 1).toInt();
98
    stackingCalibration = settings.value("stacking/calibration", 1).toInt();
97
    stackingAcquisition= settings.value("stacking/acquisition", 1).toInt();
99
    stackingAcquisition= settings.value("stacking/acquisition", 1).toInt();
98
 
100
 
99
    setupSuccessful = true;
101
    setupSuccessful = true;
100
}
102
}
101
 
103
 
102
 
104
 
103
void SMCaptureWorker::doWork(){
105
void SMCaptureWorker::doWork(){
104
 
106
 
105
    if(!setupSuccessful)
107
    if(!setupSuccessful)
106
        return;
108
        return;
107
 
109
 
108
    working = true;
110
    working = true;
109
 
111
 
110
    cv::Mat checkerboard(8, 8, CV_8UC3);
112
    cv::Mat checkerboard(8, 8, CV_8UC3);
111
    checkerboard.setTo(0);
113
    checkerboard.setTo(0);
112
    checkerboard.rowRange(0, 4).colRange(0, 4).setTo(cv::Vec3b(255,255,255));
114
    checkerboard.rowRange(0, 4).colRange(0, 4).setTo(cv::Vec3b(255,255,255));
113
    checkerboard.rowRange(4, 8).colRange(4, 8).setTo(cv::Vec3b(255,255,255));
115
    checkerboard.rowRange(4, 8).colRange(4, 8).setTo(cv::Vec3b(255,255,255));
114
 
116
 
115
    // Processing loop
117
    // Processing loop
116
//    QTime time;
118
//    QTime time;
117
//    time.start();
119
//    time.start();
118
    while(working){
120
    while(working){
119
 
121
 
120
        if(focusingPattern)
122
        if(focusingPattern)
121
            projector->displayTexture(checkerboard.ptr(), checkerboard.cols, checkerboard.rows);
123
            projector->displayTexture(checkerboard.ptr(), checkerboard.cols, checkerboard.rows);
122
        else
124
        else
123
            projector->displayWhite();
125
            projector->displayWhite();
124
 
126
 
125
 
127
 
126
        // prevent image acquisition timeout
128
        // prevent image acquisition timeout
127
        QTest::qSleep(100);
129
        QTest::qSleep(100);
128
 
130
 
129
        CameraFrame frame;
131
        CameraFrame frame;
130
 
132
 
131
        // trigger cameras
133
        // trigger cameras
132
        camera0->trigger();
134
        camera0->trigger();
133
        camera1->trigger();
135
        camera1->trigger();
134
 
136
 
135
        // retrieve raw frames
137
        // retrieve raw frames
136
        frame = camera0->getFrame();
138
        frame = camera0->getFrame();
137
        cv::Mat frameCV;
139
        cv::Mat frameCV;
138
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
140
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
139
        frameCV = frameCV.clone();
141
        frameCV = frameCV.clone();
140
//        cvtools::rshift(frameCV, 8);
142
//        cvtools::rshift(frameCV, 8);
141
//        frameCV.convertTo(frameCV, CV_8UC1);
143
//        frameCV.convertTo(frameCV, CV_8UC1);
142
        emit newFrame(0, frameCV);
144
        emit newFrame(0, frameCV);
143
 
145
 
144
        frame = camera1->getFrame();
146
        frame = camera1->getFrame();
145
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
147
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
146
        frameCV = frameCV.clone();
148
        frameCV = frameCV.clone();
147
//        cvtools::rshift(frameCV, 8);
149
//        cvtools::rshift(frameCV, 8);
148
//        frameCV.convertTo(frameCV, CV_8UC1);
150
//        frameCV.convertTo(frameCV, CV_8UC1);
149
        emit newFrame(1, frameCV);
151
        emit newFrame(1, frameCV);
150
 
152
 
151
        //std::cout << "SMCaptureWorker idle " << time.restart() << "ms" << std::endl;
153
        //std::cout << "SMCaptureWorker idle " << time.restart() << "ms" << std::endl;
152
 
154
 
153
        // Process events e.g. perform a task
155
        // Process events e.g. perform a task
154
        QCoreApplication::processEvents();
156
        QCoreApplication::processEvents();
155
    }
157
    }
156
 
158
 
157
    emit finished();
159
    emit finished();
158
}
160
}
159
 
161
 
160
void SMCaptureWorker::rotateTo(float angle){
162
void SMCaptureWorker::rotateTo(float angle){
161
    // TODO is this the right check
163
    // TODO is this the right check
162
    if(!setupSuccessful || !rotationStage || !rotationStage->Handle)
164
    if(!setupSuccessful || !rotationStage || !rotationStage->Handle)
163
        return;
165
        return;
164
 
166
 
165
    rotationStage->moveAbsolute(angle);
167
    rotationStage->moveAbsolute(angle);
166
    while(rotationStage->isMoving()){
168
    while(rotationStage->isMoving()){
167
 
169
 
168
        // prevent grab timeout in flycapture
170
        // prevent grab timeout in flycapture
169
        QTest::qSleep(10);
171
        QTest::qSleep(10);
170
 
172
 
171
        // trigger cameras
173
        // trigger cameras
172
        camera0->trigger();
174
        camera0->trigger();
173
        camera1->trigger();
175
        camera1->trigger();
174
 
176
 
175
        // retrieve frames
177
        // retrieve frames
176
        CameraFrame frame;
178
        CameraFrame frame;
177
        frame = camera0->getFrame();
179
        frame = camera0->getFrame();
178
        cv::Mat frameCV;
180
        cv::Mat frameCV;
179
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
181
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
180
        frameCV = frameCV.clone();
182
        frameCV = frameCV.clone();
181
        emit newFrame(0, frameCV);
183
        emit newFrame(0, frameCV);
182
        frame = camera1->getFrame();
184
        frame = camera1->getFrame();
183
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
185
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
184
        frameCV = frameCV.clone();
186
        frameCV = frameCV.clone();
185
        emit newFrame(1, frameCV);
187
        emit newFrame(1, frameCV);
186
    }
188
    }
187
 
189
 
188
    emit rotatedTo(angle);
190
    emit rotatedTo(angle);
189
}
191
}
190
 
192
 
191
void SMCaptureWorker::acquireCalibrationSet(float angle){
193
void SMCaptureWorker::acquireCalibrationSet(float angle){
192
    if(!setupSuccessful || !rotationStage || !rotationStage->Handle)
194
    if(!setupSuccessful || !rotationStage || !rotationStage->Handle)
193
        return;
195
        return;
194
 
196
 
195
    if(angle != -1.0)
197
    if(angle != -1.0)
196
        rotateTo(angle);
198
        rotateTo(angle);
197
 
199
 
198
    projector->displayWhite();
200
    projector->displayWhite();
199
 
201
 
200
    // just for safe measures
202
    // just for safe measures
201
    QTest::qSleep(500);
203
    QTest::qSleep(500);
202
 
204
 
203
    CameraFrame frame;
205
    CameraFrame frame;
204
    SMCalibrationSet calibrationSet;
206
    SMCalibrationSet calibrationSet;
205
    cv::Mat frameCVStacked0(camera0->getFrameHeight(), camera0->getFrameWidth(), CV_32SC1, cv::Scalar(0));
207
    cv::Mat frameCVStacked0(camera0->getFrameHeight(), camera0->getFrameWidth(), CV_32SC1, cv::Scalar(0));
206
    cv::Mat frameCVStacked1(camera1->getFrameHeight(), camera1->getFrameWidth(), CV_32SC1, cv::Scalar(0));
208
    cv::Mat frameCVStacked1(camera1->getFrameHeight(), camera1->getFrameWidth(), CV_32SC1, cv::Scalar(0));
207
 
209
 
208
    for(int i=0; i<stackingCalibration; i++){
210
    for(int i=0; i<stackingCalibration; i++){
209
        // trigger cameras
211
        // trigger cameras
210
        camera0->trigger();
212
        camera0->trigger();
211
        camera1->trigger();
213
        camera1->trigger();
212
 
214
 
213
        // retrieve frames
215
        // retrieve frames
214
        frame = camera0->getFrame();
216
        frame = camera0->getFrame();
215
        cv::Mat frameCV;
217
        cv::Mat frameCV;
216
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
218
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
217
        frameCV = frameCV.clone();
219
        frameCV = frameCV.clone();
218
        cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_32SC1);
220
        cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_32SC1);
219
//cvtools::writeMat(frameCV, "frameCV.mat", "frameCV");
221
//cvtools::writeMat(frameCV, "frameCV.mat", "frameCV");
220
//cvtools::writeMat(frameCVStacked0, "frameCVStacked0.mat", "frameCVStacked0");
222
//cvtools::writeMat(frameCVStacked0, "frameCVStacked0.mat", "frameCVStacked0");
221
        emit newFrame(0, frameCV);
223
        emit newFrame(0, frameCV);
222
 
224
 
223
        frame = camera1->getFrame();
225
        frame = camera1->getFrame();
224
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
226
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
225
        frameCV = frameCV.clone();
227
        frameCV = frameCV.clone();
226
        cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_32SC1);
228
        cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_32SC1);
227
 
229
 
228
        emit newFrame(1, frameCV);
230
        emit newFrame(1, frameCV);
229
 
231
 
230
    }
232
    }
231
 
233
 
232
    frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stackingCalibration);
234
    frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stackingCalibration);
233
//cvtools::writeMat(frameCVStacked0, "frameCVStacked0a.mat", "frameCVStacked0a");
235
//cvtools::writeMat(frameCVStacked0, "frameCVStacked0a.mat", "frameCVStacked0a");
234
    frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stackingCalibration);
236
    frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stackingCalibration);
235
 
237
 
236
    calibrationSet.frame0 = frameCVStacked0;
238
    calibrationSet.frame0 = frameCVStacked0;
237
    calibrationSet.frame1 = frameCVStacked1;
239
    calibrationSet.frame1 = frameCVStacked1;
238
 
240
 
239
    calibrationSet.rotationAngle = rotationStage->getAngle();
241
    calibrationSet.rotationAngle = rotationStage->getAngle();
240
 
242
 
241
    emit newCalibrationSet(calibrationSet);
243
    emit newCalibrationSet(calibrationSet);
242
}
244
}
243
 
245
 
244
void SMCaptureWorker::acquireCalibrationSets(std::vector<float> angles){
246
void SMCaptureWorker::acquireCalibrationSets(std::vector<float> angles){
245
 
247
 
246
    if(!setupSuccessful)
248
    if(!setupSuccessful)
247
        return;
249
        return;
248
 
250
 
249
    for(unsigned int i=0; i<angles.size(); i++)
251
    for(unsigned int i=0; i<angles.size(); i++)
250
        acquireCalibrationSet(angles[i]);
252
        acquireCalibrationSet(angles[i]);
251
}
253
}
252
 
254
 
253
void SMCaptureWorker::acquireFrameSequence(float angle){
255
void SMCaptureWorker::acquireFrameSequence(float angle){
254
 
256
 
255
    if(!setupSuccessful)
257
    if(!setupSuccessful)
256
        return;
258
        return;
257
 
259
 
258
    if(angle != -1.0)
260
    if(angle != -1.0)
259
        rotateTo(angle);
261
        rotateTo(angle);
260
 
262
 
261
    CameraFrame frame;
263
    CameraFrame frame;
262
    SMFrameSequence frameSequence;
264
    SMFrameSequence frameSequence;
263
 
265
 
264
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
266
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
265
 
267
 
266
        // display pattern
268
        // display pattern
267
        projector->displayPattern(i);
269
        projector->displayPattern(i);
268
 
270
 
269
        QTest::qSleep(delay);
271
        QTest::qSleep(delay);
270
 
272
 
271
        cv::Mat frameCVStacked0(camera0->getFrameHeight(), camera0->getFrameWidth(), CV_32SC1, cv::Scalar(0));
273
        cv::Mat frameCVStacked0(camera0->getFrameHeight(), camera0->getFrameWidth(), CV_32SC1, cv::Scalar(0));
272
        cv::Mat frameCVStacked1(camera1->getFrameHeight(), camera1->getFrameWidth(), CV_32SC1, cv::Scalar(0));
274
        cv::Mat frameCVStacked1(camera1->getFrameHeight(), camera1->getFrameWidth(), CV_32SC1, cv::Scalar(0));
273
        for(int i=0; i<stackingAcquisition; i++){
275
        for(int i=0; i<stackingAcquisition; i++){
274
            // trigger cameras
276
            // trigger cameras
275
            camera0->trigger();
277
            camera0->trigger();
276
            camera1->trigger();
278
            camera1->trigger();
277
 
279
 
278
            // retrieve frames
280
            // retrieve frames
279
            frame = camera0->getFrame();
281
            frame = camera0->getFrame();
280
            cv::Mat frameCV;
282
            cv::Mat frameCV;
281
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
283
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
282
            frameCV = frameCV.clone();
284
            frameCV = frameCV.clone();
283
            cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_32SC1);
285
            cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_32SC1);
284
 
286
 
285
            emit newFrame(0, frameCV);
287
            emit newFrame(0, frameCV);
286
 
288
 
287
            frame = camera1->getFrame();
289
            frame = camera1->getFrame();
288
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
290
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
289
            frameCV = frameCV.clone();
291
            frameCV = frameCV.clone();
290
            cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_32SC1);
292
            cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_32SC1);
291
 
293
 
292
            emit newFrame(1, frameCV);
294
            emit newFrame(1, frameCV);
293
 
295
 
294
        }
296
        }
295
 
297
 
296
        frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stackingAcquisition);
298
        frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stackingAcquisition);
297
        frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stackingAcquisition);
299
        frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stackingAcquisition);
298
 
300
 
299
        frameSequence.frames0.push_back(frameCVStacked0);
301
        frameSequence.frames0.push_back(frameCVStacked0);
300
        frameSequence.frames1.push_back(frameCVStacked1);
302
        frameSequence.frames1.push_back(frameCVStacked1);
301
 
303
 
302
    }
304
    }
303
 
305
 
304
    if(rotationStage && rotationStage->Handle)// TODO is this the right check
306
    if(rotationStage && rotationStage->Handle)// TODO is this the right check
305
        frameSequence.rotationAngle = rotationStage->getAngle();
307
        frameSequence.rotationAngle = rotationStage->getAngle();
306
    else
308
    else
307
        frameSequence.rotationAngle = 0;
309
        frameSequence.rotationAngle = 0;
308
 
310
 
309
    frameSequence.codec = codec;
311
    frameSequence.codec = codec;
310
 
312
 
311
    emit newFrameSequence(frameSequence);
313
    emit newFrameSequence(frameSequence);
312
 
314
 
313
    projector->displayWhite();
315
    projector->displayWhite();
314
}
316
}
315
 
317
 
316
 
318
 
317
void SMCaptureWorker::acquireFrameSequences(std::vector<float> angles){
319
void SMCaptureWorker::acquireFrameSequences(std::vector<float> angles){
318
 
320
 
319
    if(!setupSuccessful)
321
    if(!setupSuccessful)
320
        return;
322
        return;
321
 
323
 
322
    for(unsigned int i=0; i<angles.size(); i++)
324
    for(unsigned int i=0; i<angles.size(); i++)
323
        acquireFrameSequence(angles[i]);
325
        acquireFrameSequence(angles[i]);
324
}
326
}
325
 
327
 
326
void SMCaptureWorker::abort(){}
328
void SMCaptureWorker::abort(){}
327
 
329
 
328
void SMCaptureWorker::stopWork(){
330
void SMCaptureWorker::stopWork(){
329
    working = false;
331
    working = false;
330
}
332
}
331
 
333
 
332
 
334