OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 2733|回复: 0

图像分割的原图片有要求么?生产OK,但调试NG,未分割

[复制链接]
发表于 2018-9-27 16:35:58 | 显示全部楼层 |阅读模式
  1. #include<opencv2/core/core.hpp>
  2. #include<opencv2/highgui/highgui.hpp>
  3. #include<opencv2/video/background_segm.hpp>
  4. #include<opencv2/opencv.hpp>
  5. #include<stdio.h>
  6. #include<iostream>
  7. #include<sstream>
  8. using namespace cv;
  9. using namespace std;
  10. //全局变量区域
  11. cv::Point point1,point2;
  12. int drag = 0;
  13. cv::Rect rect;
  14. cv::Mat srcImage, roiImg;
  15. bool select_flag = true;
  16. cv::Mat rectImg;
  17. vector<Point>Pf,Pb;
  18. //鼠标响应回调
  19. void mouseHandler(int event, int x, int y, int flags, void* param)
  20. {
  21.         //左键按下
  22.         if (event == CV_EVENT_LBUTTONDOWN && !drag)
  23.         {
  24.                 point1 = Point(x,y);
  25.                 drag = 1;
  26.         }
  27.         //鼠标移动
  28.         else if (event == CV_EVENT_LBUTTONDOWN && drag)
  29.         {
  30.                 Mat imgl = srcImage.clone();
  31.                 point2 = Point(x,y);
  32.                 //绘制图形上矩形区域
  33.                 rectangle(imgl, point1, point2,
  34.                         CV_RGB(255, 0, 0), 3, 8, 0);
  35.                 imshow("image",imgl);
  36.         }
  37.         //左键抬起与摇曳标志
  38.         else if(event == CV_EVENT_LBUTTONDOWN && drag)
  39.         {
  40.                 point2 = Point(x,y);
  41.                 rect = Rect(point1.x,point1.y,x-point1.x,y-point1.y);
  42.                 drag = 0;
  43.                 roiImg = srcImage(rect);
  44.         }
  45.         //右键按下
  46.         else if (event == CV_EVENT_LBUTTONDOWN)
  47.         {
  48.                 select_flag = false;
  49.                 drag = 0;
  50.                 imshow("ROI",roiImg);
  51.         }
  52. }
  53. int main()
  54. {
  55.         cv::Mat srcImage =
  56.                 cv::imread("E:\\OpenCV\\Workplace\\testOpencv\\testOpencv\\line.jpg");
  57.         if(srcImage.empty())
  58.                 return -1;
  59.         //定义前景与输出图形
  60.         cv::Mat srcImage2 = srcImage.clone();
  61.         cv::Mat foreground(srcImage.size(),
  62.                 CV_8UC3,cv::Scalar(255,255,255));
  63.         cv::Mat result(srcImage.size(),CV_8UC1);
  64.         //Grabcut分割前景与背景
  65.         cv::Mat fgMat,bgMat;
  66.         namedWindow("srcImage",1);
  67.         imshow("srcImage",srcImage);
  68.         //迭代次数
  69.         int i = 20;
  70.         std::cout<<"20 iters"<<std::endl;
  71.         //鼠标响应
  72.         setMouseCallback("srcImage",mouseHandler,NULL);
  73.         //选择区域有效,按下ESC键退出
  74.         while ((select_flag == true)&&(waitKey(0) !=27))
  75.         {
  76.                 //实现图割操作
  77.                 grabCut(srcImage,result,rect,bgMat,
  78.                         fgMat, i, GC_INIT_WITH_RECT);
  79.                 //图像匹配
  80.                 cv::compare(result,cv::GC_PR_FGD,
  81.                         result,cv::CMP_EQ);
  82.                 //生成前景图像
  83.                 srcImage.copyTo(foreground, result);
  84.                 imshow("foreground",foreground);
  85.         }
  86.         cv::waitKey(0);
  87.         return 0;
  88. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-29 07:13 , Processed in 0.008663 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表