opencv图像处理之轮廓外背景颜色改变
来源:互联网 发布:淘宝五心需要多少好评 编辑:程序博客网 时间:2024/05/22 04:56
自行学习弄得简单代码,使用了图像中的轮廓发现以及提取,再绘制出来,改变轮廓外的像素
首先,头文件,写的比较多,没用的可以自己去除
#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);}
如有不足,敬请谅解!
阅读全文
0 0
- opencv图像处理之轮廓外背景颜色改变
- C语言处理图像之改变背景前景颜色
- opencv 图像轮廓处理
- 【OpenCV 图像轮廓处理函数】
- 改变背景图像或颜色
- opencv之图像轮廓提取
- 2.1OpenCV改变图像颜色
- opencv-OpenCV中的图像处理 [2]-OpenCV中的轮廓
- 图像处理之查找图像轮廓
- OpenCV实现图像物体轮廓,前景背景,标记,并保存。
- OpenCV学习之图像轮廓提取
- Python-OpenCV 处理图像:图像中边界和轮廓检测
- 图像处理之点与轮廓关系
- 图像处理之_轮廓匹配
- opencv之改变图像尺寸
- 图像轮廓获取opencv
- opencv-图像轮廓
- OpenCV图像的轮廓
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-PLC支持哪些PLC语言类型
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-Switch Case语句是否会自动跳转到下一个
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-T_AmsNetID是什么
- 动态规划:叠放箱子
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-报错0X4650,18000错误怎么办
- opencv图像处理之轮廓外背景颜色改变
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-报错0X4655,18005错误怎么办
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点动面板的每个按钮含义
- NEUQACM OJ:1255--查找最大元素
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-点击运行按钮进入到运行状态报错Error starting TwinCAT System怎么办 AdsWarning1823怎么办
- java synchronized关键字this与this.Class的区别
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-可以用软件自带NC工具驱动但是程序无法让电机转动怎么办
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-电机实际运行距离跟给定距离不一致怎么办,如何设置Scaling Factor
- Duan2baka的各种LCA模板!