matlab灰度图孔洞填充,OpenCV图像内轮廓填-孔洞填充
//test
#include "stdafx.h"
#include "cxcore.h"
#include "cv.h"
#include "highgui.h"
// 内轮廓填充
// 参数:
// 1. pBinary: 输入二值图像,单通道,位深IPL_DEPTH_8U。
// 2. dAreaThre: 面积阈值,当内轮廓面积小于等于dAreaThre时,进行填充。
void FillInternalContours(IplImage *pBinary, double dAreaThre)
{
double dConArea;
CvSeq *pContour = NULL;
CvSeq *pConInner = NULL;
CvMemStorage *pStorage = NULL;
// 执行条件
if (pBinary)
{
// 查找所有轮廓
pStorage = cvCreateMemStorage(0);
cvFindContours(pBinary, pStorage, &pContour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);
// 填充所有轮廓
cvDrawContours(pBinary, pContour, CV_RGB(255, 255, 255), CV_RGB(255, 255, 255), 2, CV_FILLED, 8, cvPoint(0, 0));
// 外轮廓循环
int wai = 0;
int nei = 0;
for (; pContour != NULL; pContour = pContour->h_next)
{
wai++;
// 内轮廓循环
for (pConInner = pContour->v_next; pConInner != NULL; pConInner = pConInner->h_next)
{
nei++;
// 内轮廓面积
dConArea = fabs(cvContourArea(pConInner, CV_WHOLE_SEQ));
printf("%f\n", dConArea);
if (dConArea <= dAreaThre)
{
cvDrawContours(pBinary, pConInner, CV_RGB(255, 255, 255), CV_RGB(255, 255, 255), 0, CV_FILLED, 8, cvPoint(0, 0));
}
}
}
printf("wai = %d, nei = %d", wai, nei);
cvReleaseMemStorage(&pStorage);
pStorage = NULL;
}
}
int Otsu(IplImage* src)
{
int height=src->height;
int width=src->width;
//histogram
float histogram[256] = {0};
for(int i=0; i
{
unsigned char* p=(unsigned char*)src->imageData + src->widthStep * i;
for(int j = 0; j
{
histogram[*p++]++;
}
}
//normalize histogram
int size = height * width;
for(int i = 0; i
{
histogram[i] = histogram[i] / size;
}
//average pixel value
float avgValue=0;
for(int i=0; i
{
avgValue += i * histogram[i]; //整幅图像的平均灰度
}
int threshold;
float maxVariance=0;
float w = 0, u = 0;
for(int i = 0; i
{
w += histogram[i]; //假设当前灰度i为阈值, 0~i 灰度的像素(假设像素值在此范围的像素叫做前景像素) 所占整幅图像的比例
u += i * histogram[i]; // 灰度i 之前的像素(0~i)的平均灰度值: 前景像素的平均灰度值
float t = avgValue * w - u;
float variance = t * t / (w * (1 - w) );
if(variance > maxVariance)
{
maxVariance = variance;
threshold = i;
}
}
return threshold;
}
int main()
{
IplImage *img = cvLoadImage("c://temp.jpg", 0);
IplImage *bin = cvCreateImage(cvGetSize(img), 8, 1);
int thresh = Otsu(img);
cvThreshold(img, bin, thresh, 255, CV_THRESH_BINARY);
FillInternalContours(bin, 200);
cvNamedWindow("img");
cvShowImage("img", img);
cvNamedWindow("result");
cvShowImage("result", bin);
cvWaitKey(-1);
cvReleaseImage(&img);
cvReleaseImage(&bin);
return 0;
}
matlab灰度图孔洞填充,OpenCV图像内轮廓填-孔洞填充相关推荐
- Python使用openCV把原始彩色图像转化为灰度图、使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本)、基于自适应阈值预处理(adaptive thresholding)方法
Python使用openCV把原始彩色图像转化为灰度图.使用OpenCV把图像二值化(仅仅包含黑色和白色的简化版本).基于自适应阈值预处理(adaptive thresholding)方法 目录
- matlab灰度图孔洞填充,一种深度图像空洞的自动填充方法与流程
本发明涉及深度图像空洞填充技术,从彩色图像的结构相似性出发,求解空洞像素点的多尺度结构相似性,将空洞像素分为平滑区域空洞像素和非平滑区域空洞像素,并针对不同的空洞像素,采用不同的填充算法.在平滑区域空 ...
- cv2 inrange灰度图_基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析...
title: [python]基于openCV,PIL的深色多背景复杂验证码图像转灰度二值化,并去噪降噪处理分析 type: categories copyright: true categories ...
- matlab灰度图转伪彩色,[转载]灰度图转伪彩色图和彩虹图,基于OpenCV 2.4.3
做东西需要用到灰度转伪彩显示,毕竟嘛,人眼对彩色的分辨远远高于对灰度的分辨. 本来想这么成熟的东西网上肯定有代码,我勒个擦,找了一圈都是不知所云的东西,还是自己写一个吧!!!! 废话不说了,代码是码农 ...
- matlab灰度图转rgb原理,RGB图像转化为灰度图原理以及MATLAB实现
RGB图像转化为灰度图原理以及MATLAB实现 1 原理 在RGB彩色模型中表示的图像由三个分量图像组成,每种原色一幅分量图像.利用MATLAB对图像进行读取,可以知道存储RGB图像数据为256*25 ...
- python 灰度图转矩阵_图像转换矩阵
一.Python pillow模块 pip install pillow 二.使用 from PIL import Image import numpy as np def loadImage(): ...
- matlab灰度图上色代码改进
原例程代码地址 例程代码 代码简要分析 1.首先将灰度图转换为特殊的rgb图像(将灰度单通道扩展为rgb三通道) 2.将rgb三通道转换为Ycrbr三通道 3.根据Y分量对两张图进行匹配,用彩图Y分量 ...
- matlab 灰度图与索引图
P=imread('lem.jpg') subplot(2,2,1) imshow(P) title('原版雷姆') L=rgb2gray(P) subplot(2,2,2) imshow(L) ti ...
- OpenCV图像的轮廓的匹配
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板. 矩 比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说 ...
最新文章
- mysql获取当前时间,及其相关操作
- Unity 中渲染顺序的理解以及一些坑点 以及2.5D游戏中的渲染排序解决方案
- php多个文件上传代码,PHP单文件上传类或多文件上传类源码
- 03_Influxdb数据库的简单操作
- CCF202012-1 期末预测之安全指数
- 【IDEA】IDEA 设置 字体 可以滚轮 改变大小
- 利用指针数组计算2个3行4列矩阵的和_[剑指 Offer] 04. 二维数组中的查找
- mongodb的学习过程
- Quartz 触发器、过期触发策略 、排它日历、数据持久化
- solr6 mysql增量更新_solr 的全量更新与增量更新
- 关于ISIC数据集如何下载的问题
- Java IO 和 NIO的区别
- 江娱互动:游戏领域 Serverless 架构探索之路
- 360安全卫士安装不了此程序被组策略阻止
- 面对互联网寒冬裁员潮,HR都在干什么?
- DataGear 制作Excel动态数据可视化图表
- 精准大数据获客——移动 联通 电信运营商大数据分析_营销
- 解决Flutter Android sdkmanager tool not found
- 卡尔曼滤波器的实用方法及其实现方法
- Python 员工工时汇总