-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathRegion.cpp
More file actions
66 lines (53 loc) · 1.41 KB
/
Copy pathRegion.cpp
File metadata and controls
66 lines (53 loc) · 1.41 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
#include "Region.hpp"
//#define REGION_DEBUG
#include "OpenCVUtils.hpp"
#ifdef REGION_DEBUG
#include <iostream>
using std::cout;
using std::cerr;
using std::endl;
#endif
Region::Region(IplImage *I){
// TODO: make sure this image is a mask images
mask = I;
valid = true;
}
Region::~Region(){
if(mask != NULL)
cvReleaseImage(&mask);
}
void Region::setValid(bool v){
valid = v;
}
bool Region::isValid(){
return valid;
}
double Region::setIntersect(Region *r){
//TODO: check if mask and r->mask are compatible
IplImage *temp = cvCreateImage(cvGetSize(mask), mask->depth, mask->nChannels);
cvSetZero(temp);
cvAnd(mask, r->mask, temp);
int nNZ = cvCountNonZero(temp);
double areaDbl = (double) nNZ;
#ifdef REGION_DEBUG
showImage("Mask Intersect", temp);
cout << "Intersect " << areaDbl << endl;
#endif
cvReleaseImage(&temp);
return areaDbl;
}
double Region::setUnion(Region *r){
//TODO:i check if mask and r->mask are compatible
IplImage *temp = cvCreateImage(cvGetSize(mask), mask->depth, mask->nChannels);
cvSetZero(temp);
cvOr(mask, r->mask, temp);
int nNZ = cvCountNonZero(temp);
double areaDbl = (double) nNZ;
#ifdef REGION_DEBUG
cvConvertScale(temp, temp, 255/REGION_MASK_VALUE, 0);
showImage("Mask Union", temp);
cout << "Union " << areaDbl << " " << nNZ << endl;
#endif
cvReleaseImage(&temp);
return areaDbl;
}