Subversion Repositories seema-scanner

Rev

Rev 107 | Rev 114 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 107 Rev 113
Line 64... Line 64...
64
        cv::Mat pattern = algorithm->getEncodingPattern(i);
64
        cv::Mat pattern = algorithm->getEncodingPattern(i);
65
        projector->setPattern(i, pattern.ptr(), pattern.cols, pattern.rows);
65
        projector->setPattern(i, pattern.ptr(), pattern.cols, pattern.rows);
66
    }
66
    }
67
 
67
 
68
    delay = settings.value("trigger/delay", 50).toInt();
68
    delay = settings.value("trigger/delay", 50).toInt();
-
 
69
    stacking = settings.value("stacking", 1).toInt();
69
}
70
}
70
 
71
 
71
 
72
 
72
void SMCaptureWorker::doWork(){
73
void SMCaptureWorker::doWork(){
73
 
74
 
74
    working = true;
75
    working = true;
75
 
76
 
76
    // Processing loop
77
    // Processing loop
77
    QTime time;
78
//    QTime time;
78
    time.start();
79
//    time.start();
79
    while(working){
80
    while(working){
80
 
81
 
81
        projector->displayWhite();
82
        projector->displayWhite();
82
 
83
 
83
        std::vector<cv::Mat> frameSet;
-
 
84
 
-
 
85
        CameraFrame frame;
84
        CameraFrame frame;
86
 
85
 
87
        // trigger cameras
86
        // trigger cameras
88
        camera0->trigger();
87
        camera0->trigger();
89
        camera1->trigger();
88
        camera1->trigger();
90
 
89
 
91
        // retrieve frames
90
        // retrieve raw frames
92
        frame = camera0->getFrame();
91
        frame = camera0->getFrame();
93
        cv::Mat frameCV;
92
        cv::Mat frameCV;
94
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
93
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
95
        frameCV = frameCV.clone();
94
        frameCV = frameCV.clone();
96
        frameSet.push_back(frameCV);
-
 
97
 
-
 
98
        emit newFrame(0, frameCV);
95
        emit newFrame(0, frameCV);
99
 
96
 
100
        frame = camera1->getFrame();
97
        frame = camera1->getFrame();
101
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
98
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
102
        frameCV = frameCV.clone();
99
        frameCV = frameCV.clone();
103
        frameSet.push_back(frameCV);
-
 
104
 
-
 
105
        emit newFrame(1, frameCV);
100
        emit newFrame(1, frameCV);
106
 
101
 
107
        //std::cout << "SMCaptureWorker idle " << time.restart() << "ms" << std::endl;
102
        //std::cout << "SMCaptureWorker idle " << time.restart() << "ms" << std::endl;
108
 
103
 
109
        // Process events e.g. perform a task
104
        // Process events e.g. perform a task
Line 125... Line 120...
125
 
120
 
126
        // retrieve frames
121
        // retrieve frames
127
        CameraFrame frame;
122
        CameraFrame frame;
128
        frame = camera0->getFrame();
123
        frame = camera0->getFrame();
129
        cv::Mat frameCV;
124
        cv::Mat frameCV;
130
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
125
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
131
        frameCV = frameCV.clone();
126
        frameCV = frameCV.clone();
132
        emit newFrame(0, frameCV);
127
        emit newFrame(0, frameCV);
133
        frame = camera1->getFrame();
128
        frame = camera1->getFrame();
134
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
129
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
135
        frameCV = frameCV.clone();
130
        frameCV = frameCV.clone();
136
        emit newFrame(1, frameCV);
131
        emit newFrame(1, frameCV);
137
    }
132
    }
138
 
133
 
139
    emit rotatedTo(angle);
134
    emit rotatedTo(angle);
Line 144... Line 139...
144
    if(angle != -1.0)
139
    if(angle != -1.0)
145
        rotateTo(angle);
140
        rotateTo(angle);
146
 
141
 
147
    CameraFrame frame;
142
    CameraFrame frame;
148
    SMCalibrationSet calibrationSet;
143
    SMCalibrationSet calibrationSet;
-
 
144
    cv::Mat frameCVStacked0, frameCVStacked1;
-
 
145
 
-
 
146
    for(int i=0; i<stacking; i++){
-
 
147
        // trigger cameras
-
 
148
        camera0->trigger();
-
 
149
        camera1->trigger();
-
 
150
 
-
 
151
        // retrieve frames
-
 
152
        frame = camera0->getFrame();
-
 
153
        cv::Mat frameCV;
-
 
154
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
-
 
155
        frameCV = frameCV.clone();
-
 
156
        cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_16UC1);
149
 
157
 
150
    // trigger cameras
-
 
151
    camera0->trigger();
-
 
152
    camera1->trigger();
-
 
153
 
-
 
154
    // retrieve frames
-
 
155
    frame = camera0->getFrame();
-
 
156
    cv::Mat frameCV;
-
 
157
    frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
-
 
158
    frameCV = frameCV.clone();
-
 
159
 
-
 
160
    emit newFrame(0, frameCV);
158
        emit newFrame(0, frameCV);
161
    calibrationSet.frame0 = frameCV;
-
 
162
 
-
 
163
    frame = camera1->getFrame();
-
 
164
    frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
-
 
165
    frameCV = frameCV.clone();
-
 
166
 
159
 
-
 
160
        frame = camera1->getFrame();
-
 
161
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
-
 
162
        frameCV = frameCV.clone();
-
 
163
        cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_16UC1);
-
 
164
 
167
    emit newFrame(1, frameCV);
165
        emit newFrame(1, frameCV);
-
 
166
 
-
 
167
    }
-
 
168
 
-
 
169
    frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stacking);
-
 
170
    frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stacking);
-
 
171
 
-
 
172
    calibrationSet.frame0 = frameCVStacked0;
168
    calibrationSet.frame1 = frameCV;
173
    calibrationSet.frame1 = frameCVStacked1;
169
 
174
 
170
    calibrationSet.rotationAngle = rotationStage->getAngle();
175
    calibrationSet.rotationAngle = rotationStage->getAngle();
171
 
176
 
172
    emit newCalibrationSet(calibrationSet);
177
    emit newCalibrationSet(calibrationSet);
173
}
178
}
Line 182... Line 187...
182
 
187
 
183
    if(angle != -1.0)
188
    if(angle != -1.0)
184
        rotateTo(angle);
189
        rotateTo(angle);
185
 
190
 
186
    CameraFrame frame;
191
    CameraFrame frame;
187
 
-
 
188
    SMFrameSequence frameSequence;
192
    SMFrameSequence frameSequence;
189
 
193
 
190
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
194
    for(unsigned int i=0; i<algorithm->getNPatterns(); i++){
191
 
195
 
192
        // display pattern
196
        // display pattern
193
        projector->displayPattern(i);
197
        projector->displayPattern(i);
194
 
198
 
195
        QTest::qSleep(delay);
199
        QTest::qSleep(delay);
196
 
200
 
-
 
201
        cv::Mat frameCVStacked0, frameCVStacked1;
-
 
202
        for(int i=0; i<stacking; i++){
197
        // trigger cameras
203
            // trigger cameras
198
        camera0->trigger();
204
            camera0->trigger();
199
        camera1->trigger();
205
            camera1->trigger();
-
 
206
 
-
 
207
            // retrieve frames
-
 
208
            frame = camera0->getFrame();
-
 
209
            cv::Mat frameCV;
-
 
210
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
-
 
211
            frameCV = frameCV.clone();
-
 
212
            cv::add(frameCV, frameCVStacked0, frameCVStacked0, cv::noArray(), CV_16UC1);
-
 
213
 
-
 
214
            emit newFrame(0, frameCV);
-
 
215
 
-
 
216
            frame = camera1->getFrame();
-
 
217
            frameCV  = cv::Mat(frame.height, frame.width, CV_8UC1, frame.memory);
-
 
218
            frameCV = frameCV.clone();
-
 
219
            cv::add(frameCV, frameCVStacked1, frameCVStacked1, cv::noArray(), CV_16UC1);
-
 
220
 
-
 
221
            emit newFrame(1, frameCV);
200
 
222
 
201
        // retrieve frames
-
 
202
        frame = camera0->getFrame();
-
 
203
        cv::Mat frameCV;
223
        }
204
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
-
 
205
        frameCV = frameCV.clone();
-
 
206
 
-
 
207
        emit newFrame(0, frameCV);
-
 
208
        frameSequence.frames0.push_back(frameCV);
-
 
209
 
224
 
210
        frame = camera1->getFrame();
-
 
211
        frameCV  = cv::Mat(frame.height, frame.width, CV_8UC3, frame.memory);
225
        frameCVStacked0.convertTo(frameCVStacked0, CV_8UC1, 1.0/stacking);
212
        frameCV = frameCV.clone();
226
        frameCVStacked1.convertTo(frameCVStacked1, CV_8UC1, 1.0/stacking);
213
 
227
 
214
        emit newFrame(1, frameCV);
228
        frameSequence.frames0.push_back(frameCVStacked0);
215
        frameSequence.frames1.push_back(frameCV);
229
        frameSequence.frames1.push_back(frameCVStacked1);
216
 
230
 
217
    }
231
    }
218
 
232
 
219
    frameSequence.rotationAngle = rotationStage->getAngle();
233
    frameSequence.rotationAngle = rotationStage->getAngle();
220
    frameSequence.codec = codec;
234
    frameSequence.codec = codec;