티스토리 뷰







#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
class WatershedSegmenter {
private:
Mat markers;
public:
void setMarkers(const Mat& markerImage) {
// Convert to image of ints
markerImage.convertTo(markers, CV_32SC1);
}
Mat process(const Mat &image) {
// Apply watershed
watershed(image, markers);
return markers;
}
Mat getSegmentation() {
Mat tmp;
// all segment with label higher than 255 will be assigned value 255
markers.convertTo(tmp, CV_8UC1);
return tmp;
}
// Return watershed in the form of an image
Mat getWatersheds() {
Mat tmp;
// Each pixel p is transformed into 255p + 255 before conversion
// boundary = -1, (255 * -1 + 255 = 0)
markers.convertTo(tmp, CV_8UC1, 255, 255);
return tmp;
}
};
int main() {
Mat cow_binary = imread("cow_binary.bmp", IMREAD_GRAYSCALE);
Mat cow_original = imread("cow_original.jpg", IMREAD_COLOR);
// Eliminate noise and smaller objects
Mat foreground;
erode(cow_binary, foreground, Mat(), Point(-1, -1), 4);
// Identify image pixels without objects
Mat background;
dilate(cow_binary, background, Mat(), Point(-1, -1), 4);
threshold(background, background, 1, 128, THRESH_BINARY_INV);
// Create markers image
Mat markers(cow_binary.size(), CV_8UC1, Scalar(0));
markers = foreground + background;
// Create watershed segmentation object
WatershedSegmenter segmenter;
// Set markers and process
segmenter.setMarkers(markers);
Mat watershedResult = segmenter.process(cow_original);
// getSegmentation
Mat segmentation = segmenter.getSegmentation();
// get watershed
Mat watershed = segmenter.getWatersheds();
imwrite("foreground.bmp", foreground);
imwrite("background.bmp", background);
imwrite("markers.bmp", markers);
imwrite("segmentation.bmp", segmentation);
imwrite("watershed.bmp", watershed);
}
'영상처리 > OpenCV' 카테고리의 다른 글
18. Bilateral filter (0) | 2019.06.02 |
---|---|
17. Maximally stable external regions (0) | 2019.06.02 |
15. Morphological operations (0) | 2019.05.26 |
14. Integral image (0) | 2019.05.21 |
13. Backprojection & meanshift (0) | 2019.05.18 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Low pass filter
- segmentation
- equalizing
- median filter
- erosion
- direction detection
- canny
- canny operator
- mean filter
- high pass filter
- OpenCV
- pyrUp
- top hat
- adaptive thresholding
- pyrDown
- Filter
- difference of gaussian
- bilateral filter
- morphological operation
- 캐니 엣지
- dilation
- gradient
- hough transform
- laplacian of gaussian
- upsampling
- Sobel
- Line Detection
- black top hat
- morphology
- 영상처리
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함