C++ 分水岭分割opencv xcode

C++ 分水岭分割opencv xcode,第1张

概述我现在正在学习opencv代码簿中的代码(OpenCV 2计算机视觉应用程序设计手册):第5章,使用分水岭分割图像,第131页. 这是我的主要代码: #include "opencv2/opencv.hpp"#include <string>using namespace cv;using namespace std;class WatershedSegmenter { pri 我现在正在学习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,6);    cv::threshold(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);}

但是,它不起作用.我怎么能初始化二进制图像?我怎样才能使这个分段代码工作?

我对这本书的这一部分不是很清楚.
提前致谢!

解决方法 关于你的代码,有几件事应该提到:

> watershed期望输入和输出图像具有相同的大小;
>你可能想要摆脱方法中的const参数;
>请注意,分水岭的结果实际上是标记,而不是代码所暗示的图像;关于那个,你需要获取进程()的返回!

这是您的代码,上面有一些修复:

// Usage: ./app input.jpg#include "opencv2/opencv.hpp"#include <string>using namespace cv;using namespace std;class watershedSegmenter{private:    cv::Mat markers;public:    voID setMarkers(cv::Mat& markerImage)    {        markerImage.convertTo(markers,CV_32S);    }    cv::Mat process(cv::Mat &image)    {        cv::watershed(image,markers);        markers.convertTo(markers,CV_8U);        return markers;    }};int main(int argc,char* argv[]){    cv::Mat image = cv::imread(argv[1]);    cv::Mat binary;// = cv::imread(argv[2],0);    cv::cvtcolor(image,binary,CV_BGR2GRAY);    cv::threshold(binary,100,255,THRESH_BINARY);    imshow("originalimage",image);    imshow("originalbinary",binary);    // Eliminate noise and smaller objects    cv::Mat fg;    cv::erode(binary,2);    imshow("fg",fg);    // IDentify image pixels without objects    cv::Mat bg;    cv::dilate(binary,3);    cv::threshold(bg,cv::THRESH_BINARY_INV);    imshow("bg",bg);    // Create markers image    cv::Mat markers(binary.size(),cv::Scalar(0));    markers= fg+bg;    imshow("markers",markers);    // Create watershed segmentation object    watershedSegmenter segmenter;    segmenter.setMarkers(markers);    cv::Mat result = segmenter.process(image);    result.convertTo(result,CV_8U);    imshow("final_result",result);    cv::waitKey(0);    return 0;}

我冒昧地使用AbID的输入图像进行测试,这就是我得到的:

总结

以上是内存溢出为你收集整理的C++ 分水岭分割opencv xcode全部内容,希望文章能够帮你解决C++ 分水岭分割opencv xcode所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/1066262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存