opencv中自适应阈值函数的实现(c++)
根据《面向飞机蒙皮接缝的线结构光检测技术研究_张卡》论文中的原理,编写了自适应阈值函数
原理:
//计算灰度最大最小值
void MaxGrayValue(Mat image,int &max,int &min)
{
max = ;
min = ;
Mat *im = reinterpret_cast<Mat*>((void*)&image);
int height = image.rows;
int width = image.cols;
int N = height * width;
//cout << "125" << " " << "125" << " " << static_cast<int>(im->at<uchar>(Point(182, 190))) << endl;
for (int i = ; i < height; i++)
{
for (int j = ; j < width; j++)
{
if ((static_cast<int>(im->at<uchar>(Point(j, i))))>max)
max = static_cast<int>(im->at<uchar>(Point(j, i)));
else if ((static_cast<int>(im->at<uchar>(Point(j, i))))<min)
min = static_cast<int>(im->at<uchar>(Point(j, i)));
}
}
}
//自适应阈值 注:传入的只能是灰度图像
void adapthreshold(Mat &image)
{
int max, min; //保存最大和最小灰度值
MaxGrayValue(image, max, min); //计算出最大最小灰度值
int grayvalue; //用于暂时存取每个点的灰度值
int Threshold = (max + min)/; //初始阈值
int Temp_Threshold = Threshold; //用于存取每次迭代后的阈值
int big_than_th; //用于累加大于阈值的灰度值
int bigcount; //用于存放大于阈值灰度值的像素点数量
int sma_than_th; //用于累加小于阈值的灰度值
int smacount; //用于存放小于阈值灰度值的像素点数量
Mat *im = reinterpret_cast<Mat*>((void*)&image); //获取像素点信息
//Mat *im = ℑ
int height = image.rows; //获取图像高度
int width = image.cols; //获取图像宽度 for (int k = ; k < ; k++) //计算阈值,最大迭代50次
{
big_than_th = ;
bigcount = ;
sma_than_th = ;
smacount = ;
for (int i = ; i < height; i++)
{
for (int j = ; j < width; j++)
{
grayvalue = static_cast<int>(im->at<uchar>(Point(j, i))); //获取指定点灰度值
if (grayvalue>Threshold) //如果灰度值大于阈值,加到总灰度值,数量+1
{
big_than_th += grayvalue;
bigcount++;
}
else if (grayvalue < Threshold) //如果灰度值小于阈值,加到总灰度值,数量+1
{
sma_than_th += grayvalue;
smacount++;
}
}
}
Temp_Threshold = ((big_than_th*1.0 / bigcount) + (sma_than_th*1.0 / smacount)) / ; //计算新的阈值
if (abs(Temp_Threshold - Threshold) < ) //如果新的阈值和旧的阈值差值的绝对值小于10,则退出
break;
else
Threshold = Temp_Threshold; //否则旧阈值等于新阈值
}
for (int i = ; i < height; i++) //对图像进行二值化处理
{
uchar* data = image.ptr<uchar>(i);
for (int j = ; j < width; j++)
{
grayvalue = static_cast<int>(im->at<uchar>(Point(j, i)));
if (grayvalue>Threshold)
data[j] = ;
else if (grayvalue < Threshold)
data[j] = ;
}
}
}
opencv中自适应阈值函数的实现(c++)的更多相关文章
- Opencv中的阈值函数
OpenCV基础——threshold函数的使用 图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果. 参数原型 参数说明 src:源图像,可以为8位的灰度 ...
- OpenCV中的绘图函数-OpenCV步步精深
OpenCV 中的绘图函数 画线 首先要为画的线创造出环境,就要生成一个空的黑底图像 img=np.zeros((512,512,3), np.uint8) 这是黑色的底,我们的画布,我把窗口名叫做i ...
- OpenCV中的常用函数
1.cvLoadImage:将图像文件加载至内存: 2.cvNamedWindow:在屏幕上创建一个窗口: 3.cvShowImage:在一个已创建好的窗口中显示图像: 4.cvWaitKey:使程序 ...
- 【计算机视觉】OpenCV中直方图处理函数简述
计算直方图calcHist 直方图是对数据集合的统计 ,并将统计结果分布于一系列提前定义的bins中.这里的数据不只指的是灰度值 ,统计数据可能是不论什么能有效描写叙述图像的特征. 如果有一个矩阵包括 ...
- opencv:自适应阈值
#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...
- OpenCV中的新函数connectedComponentsWithStats使用
主要内容:对比新旧函数,用于过滤原始图像中轮廓分析后较小的区域,留下较大区域. 关键字 :connectedComponentsWithStats 在以前,常用的方法是"是先调用 cv ...
- 5、opencv中的绘图函数
1.目标 a.学习使用 OpenCV 绘制不同几何图形 b. 你将会学习到这些函数: cv2.line(), cv2.circle(), cv2.rectangle(),cv2.ellipse(),c ...
- OpenCV中的绘图函数
OpenCV可以用来绘制不同的集合图形,包括直线,矩形,圆,椭圆,多边形以及在图片上添加文字.用到的绘图函数包括 cv2.line(),cv2.circle(),cv2.rectangle() ,cv ...
- opencv中的exp32f函数
exp32f opencv的exp函数和cmath的exp函数在精度上存在一定差异,通过查找源码,发现了这么一段实现.代码如下: 点击查看代码 #define EXPTAB_SCALE 6 #defi ...
随机推荐
- unless it is in a subquery contained in a HAVING clause or a select list.
sql查询报错: An aggregate may not appear in the WHERE clause unless it is in asubquery contained in a HA ...
- js求数组最大值方法
定义数组 var arr = [-1, 1, 101, -52, 10, 1001, 1001] 1.es6拓展运算符... Math.max(...arr) 2.es5 apply(与方法1原理相同 ...
- Canvas的flag具体的含义
示例代码: package com.loaderman.customviewdemo; import android.content.Context; import android.graphics. ...
- Docker,就放弃了把日志写入文件
日志配置 既然用 Docker,就放弃了把日志写入文件,直接写到标准输出. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
- ASP生成JSON数据
原文地址为:ASP生成JSON数据 < %@LANGUAGE = " VBSCRIPT " CODEPAGE = " 65001 " % > ...
- mysl创建用户+授权+增、删、改查
1.mysql的root用户无法给普通用户授权问题处理 update mysql.user set Grant_priv='Y' where User='root' and Host='%': flu ...
- QuickText for Notepad++
昨刚投入新欢Notepad++,思路如泉涌,码代码也不累了,一口气用她码了两篇文- 今再接再厉,继续.QuickText严格说来算不上什么神器级插件,也仅只是一个缩写快捷输入的插件而已.可用得好,那效 ...
- MariaDB集群配置(主从和多主)
1.mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从 ...
- matplotlib中的imshow()
import matplotlib.pyplot as plt plt.imshow(x,cmap) x表示要显示的图片变量,cmap为颜色图谱,默认为RGB(A)颜色空间,也可以指定,gray是灰度 ...
- 岩哥带你飞——Spring 学习1&重要组件
------------------------------------------------------------------------------ 准备工作:1.创建一个web 项目 2.创 ...