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