-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
executable file
·72 lines (53 loc) · 1.8 KB
/
main.cpp
File metadata and controls
executable file
·72 lines (53 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <opencv2/core/core.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/highgui/highgui.hpp>
#include "image.h"
#include "misc.h"
#include "segment-image.h"
#include <iostream>
#define IMAGE "../images/image.ppm"
//#define IMAGE "../images/hall.jpg"
#define IMAGE2 "../images/output.ppm"
using namespace cv;
using namespace std;
Mat image2cv(image<rgb> * im)
{
Mat cv_mat = Mat(im->height(), im->width(), CV_8UC3);
std::memcpy(cv_mat.data, im->data, cv_mat.total()*sizeof(uchar[3]));
cvtColor(cv_mat, cv_mat, CV_BGR2RGB);
return cv_mat;
}
void cv2image(const Mat cv_mat, image<rgb> * imptr)
{
Mat cp;
cvtColor(cv_mat, cp, CV_BGR2RGB);
std::memcpy(imptr->data, cv_mat.data, cv_mat.total()*sizeof(uchar[3]));
}
int main(int argc, char *argv[])
{
Mat inputImage;
inputImage = imread(IMAGE, CV_LOAD_IMAGE_COLOR);
if (inputImage.type() != CV_8UC3)
inputImage.convertTo(inputImage, CV_8UC3);
image<rgb> *im = new image<rgb>(inputImage.cols, inputImage.rows);
cv2image(inputImage, im);
float sigma = 0.65;
float k = 150;
int min_size = 16500;
int num_ccs;
image<rgb> *seg = segment_image(im, sigma, k, 500, &num_ccs);
Mat imageSegmented = image2cv(seg);
Mat combinedImage;
addWeighted(inputImage, 0.75, imageSegmented, 0.25, 0.0, combinedImage);
imshow("first", combinedImage);
waitKey(0);
// add some trackable features
vector<Point2f> points;
cvtColor(inputImage, inputImage, CV_RGB2GRAY);
TermCriteria termcrit(TermCriteria::COUNT+TermCriteria::EPS,20,0.03);
goodFeaturesToTrack(inputImage, points, 300, 0.01, 10, Mat(), 3, 0, 0.04);
for (int i(0);i < points.size();i++)
circle(combinedImage, points.at(i), 1, Scalar(0,0,255), -1);
imwrite(IMAGE2, combinedImage);
return(0);
}