C/C++知识点之opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片
小标 2018-12-26 来源 : 阅读 1996 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之opencv3.3.1+vs2015+c++实现直接在图像上画掩码,保存掩码图片,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

    

左键红右键蓝,保存为k

#include "opencv2\imgproc\imgproc.hpp"  // Gaussian Blur
#include "opencv2\core\core.hpp"        // Basic OpenCV structures (cv::Mat, Scalar)
#include  // OpenCV window I/O
#include  // for standard I/O
#include    // for strings
#include   // for controlling float print precision
#include   // string to number conversion
using namespace  cv;
using namespace  std;
bool rButtonDown = false;
bool lButtonDown = false;
int numUsedBins = 0;
float varianceSquared = 0;
int scribbleRadius = 10;
Mat inputImg = imread("0.jpg", 3), showImg = imread("0.jpg", 3);
Mat fgScribbleMask;
Mat bgScribbleMask;

static void onMouse(int event, int x, int y, int, void*)
{
 cout << "On Mouse: (" << x << "," << y << ")" <<endl;


 if (event == CV_EVENT_LBUTTONDOWN)
 {
  lButtonDown = true;

 }
 else if (event == CV_EVENT_RBUTTONDOWN)
 {
  rButtonDown = true;

 }
 else if (event == CV_EVENT_LBUTTONUP)
 {
  lButtonDown = false;
 }
 else if (event == CV_EVENT_RBUTTONUP)
 {
  rButtonDown = false;
 }
 else if (event == CV_EVENT_MOUSEMOVE)
 {
  if (rButtonDown)
  {
   // scribble the background
   circle(bgScribbleMask, Point(x, y), scribbleRadius, 255, -1);
   circle(showImg, Point(x, y), scribbleRadius, CV_RGB(0, 0, 255), -1);

  }
  else if (lButtonDown)
  {
   // scribble the foreground
   circle(showImg, Point(x, y), scribbleRadius, CV_RGB(255, 0, 0), -1);
   circle(fgScribbleMask, Point(x, y), scribbleRadius, 255, -1);

  }

 }


 imshow("draw", showImg);
 imshow("fg mask", fgScribbleMask);
 imshow("bg mask", bgScribbleMask);
}
int main() {
 bgScribbleMask.create(2, inputImg.size, CV_8UC1);
 bgScribbleMask = 0; 
 fgScribbleMask.create(2, inputImg.size, CV_8UC1);
 fgScribbleMask = 0;
 namedWindow("draw");
 imshow("draw", showImg);
 namedWindow("input");
 imshow("input", inputImg);


 setMouseCallback("draw", onMouse, 0); 
 while (1) {
   char key = waitKey(0);
   if (key == ‘k‘) { imwrite("1123.jpg", fgScribbleMask); cout << "successed"; }
 }
}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程