【发布时间】:2012-07-11 06:24:35
【问题描述】:
我现在正在学习 opencv 代码书(OpenCV 2 计算机视觉应用程序编程手册)中的代码:第 5 章,使用分水岭分割图像,第 131 页。
这是我的主要代码:
#include "opencv2/opencv.hpp"
#include <string>
using namespace cv;
using namespace std;
class WatershedSegmenter {
private:
cv::Mat markers;
public:
void setMarkers(const cv::Mat& markerImage){
markerImage.convertTo(markers, CV_32S);
}
cv::Mat process(const cv::Mat &image){
cv::watershed(image,markers);
return markers;
}
};
int main ()
{
cv::Mat image = cv::imread("/Users/yaozhongsong/Pictures/IMG_1648.JPG");
// Eliminate noise and smaller objects
cv::Mat fg;
cv::erode(binary,fg,cv::Mat(),cv::Point(-1,-1),6);
// Identify image pixels without objects
cv::Mat bg;
cv::dilate(binary,bg,cv::Mat(),cv::Point(-1,-1),6);
cv::threshold(bg,bg,1,128,cv::THRESH_BINARY_INV);
// Create markers image
cv::Mat markers(binary.size(),CV_8U,cv::Scalar(0));
markers= fg+bg;
// Create watershed segmentation object
WatershedSegmenter segmenter;
// Set markers and process
segmenter.setMarkers(markers);
segmenter.process(image);
imshow("a",image);
std::cout<<".";
cv::waitKey(0);
}
但是,它不起作用。如何初始化二进制图像?我怎样才能使这个分段代码工作?
我对这本书的这一部分不是很清楚。 提前致谢!
【问题讨论】:
-
您好,您对代码理解有问题吗?还要检查使用的 OpenCV 的版本。我也听说那本书有一些错误,我没有查过。
-
我使用的是 opencv 2.4.1...是的,我在理解这段代码时有些困难...
-
您可以查看我在答案中设置的链接。不是关于算法如何工作,而是如何使用它。
标签: c++ xcode opencv image-processing watershed