티스토리 뷰







#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
									
							
								
								- 영상처리
- morphology
- upsampling
- median filter
- high pass filter
- bilateral filter
- laplacian of gaussian
- canny operator
- hough transform
- OpenCV
- mean filter
- segmentation
- difference of gaussian
- pyrUp
- top hat
- canny
- Low pass filter
- equalizing
- direction detection
- black top hat
- 캐니 엣지
- Filter
- pyrDown
- Sobel
- dilation
- adaptive thresholding
- Line Detection
- erosion
- morphological operation
- gradient
| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
									글 보관함
									
							
					