Opencv图像处理之轮廓外背景颜色改变

作者:hihushine 时间:2022-02-17 01:33:34 

本文实例为大家分享了Opencv轮廓外背景颜色改变的具体代码,供大家参考,具体内容如下

自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素

首先,头文件,写的比较多,没用的可以自己去除


#include <opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include"opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <fstream>
#include <opencv2/opencv.hpp>

//命名空间
using namespace cv;
using namespace std;

//图片数据名字,原图,灰度图,二值图,直方图
Mat src,src_gray,dst,src_equ;
//声明一个函数,建立滑动条
static void on_trackbar(int, void*);

主函数


int main(int argc, char** argv)
{
 //图片读入
 src = imread("D:\\PersonWork\\OpenCV\\program\\picture data\\0400.bmp");

//判断是否存在
 if (!src.data)
 {
   cout << "Image no find,error!" << endl;
 }

//灰度转换
 cvtColor(src,src_gray, CV_BGR2GRAY);

//原图窗口,显示
 namedWindow("原图", 0);
 imshow("原图", src);

//二值图窗口
 namedWindow("二值图", 0);

// 滑动条  
 int nThreshold = 120;
 createTrackbar("graybar", "二值图", &nThreshold, 255,on_trackbar);
 on_trackbar(nThreshold, 0);

waitKey(0);
 destroyWindow("原图");
 destroyWindow("二值图");
 destroyWindow("result");
 return 0;
}

回调函数


static void on_trackbar(int pos, void*)
{

//二值化
 threshold(src_gray, dst, pos, 255, CV_THRESH_BINARY);
 imshow("二值图", dst);

//直方均匀化
 equalizeHist(dst, src_equ);

//识别轮廓
 vector<vector<Point>> contours;
 vector<Vec4i> hierarchy;
 findContours(src_equ, contours, hierarchy, CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);    

//轮廓数量,可没有
 //int len=contours.size();
 //cout<<len<<endl;

//将图拷贝,进行遍历图片每个像素
 Mat secImg = src_gray.clone();
 const int np =secImg.rows * secImg.channels();
 const int nr = secImg.rows;
 for(int j=0;j<nr;j++){
   uchar *sdata = secImg.ptr<uchar>(j);
   for(int i=0;i<np;i++){

//判断是否在轮廓上或者外面,如果在便将像素变为255,即白色,因为这里需要的是最外轮廓,所以为contours[0],如果还需要别的,contours[i],i 可以取其他值
     if (pointPolygonTest(contours[0],Point(i,j),false) != 1)
       sdata[i]=255;
      }  
   }
 }

//result窗口以及显示结果
 namedWindow("result",0);
 imshow("result",secImg);

}

来源:https://blog.csdn.net/hihushine/article/details/78267343

标签:opencv,背景,颜色
0
投稿

猜你喜欢

  • Java8生成时间方式及格式化时间的方法实例

    2021-07-28 19:58:52
  • flutter使用tauri实现一个一键视频转4K软件

    2022-10-23 05:46:42
  • 基于Avalonia实现自定义弹窗的示例详解

    2022-02-27 16:30:45
  • SpringBoot统一返回JSON格式实现方法详解

    2021-10-03 20:22:52
  • Java压缩/解压文件的实现代码

    2023-08-26 04:02:56
  • maven中下载jar包源码和javadoc的命令介绍

    2023-07-27 04:41:01
  • Springboot整合redis实现发布订阅功能介绍步骤

    2021-11-23 16:42:26
  • C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案

    2021-10-03 01:54:19
  • Java流处理stream使用详解

    2021-09-17 18:27:58
  • ElasticSearch查询文档基本操作实例

    2023-11-24 14:20:02
  • OpenCV 颜色追踪的示例代码

    2023-01-19 05:20:31
  • C#读取目录下所有指定类型文件的方法

    2023-05-01 10:59:14
  • Java图片裁剪和生成缩略图的实例方法

    2023-11-09 00:01:50
  • 实现一个Android锁屏App功能的难点总结

    2022-07-21 03:03:19
  • android同时控制EditText输入字符个数和禁止特殊字符输入的方法

    2021-08-01 14:16:46
  • Java用邻接矩阵存储图的示例代码

    2021-10-05 21:39:18
  • java如何让带T的时间格式化

    2022-12-22 10:44:28
  • C#绘制饼状图和柱状图的方法

    2023-12-19 15:42:59
  • RocketMQ生产者一个应用不能发送多个NameServer消息解决

    2022-05-18 15:56:11
  • Unity3D实现鼠标控制视角转动

    2023-11-22 21:18:46
  • asp之家 软件编程 m.aspxhome.com