2015-03-09 11:14:52 TonyShengTan 阅读数 6755
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19580 人正在学习 去看看 夏曹俊


学习DIP第57天
转载请标明本文出处:***http://blog.csdn.net/tonyshengtan ***,出于尊重文章作者的劳动,转载请标明出处!文章代码已托管,欢迎共同开发:https://github.com/Tony-Tan/DIPpro
更多图像处理机器学习内容请访问最新网站www.face2ai.com

#开篇废话
废话开始,今天说下区域阈值(局部阈值),前面介绍的阈值都是全局阈值,也就是阈值根据全局信息产生,而作用对象也是整幅图像的全部像素,而局部阈值的产生是一个中心像素c(x,y)c(x,y)的邻域的一些属性来计算出一个或多个阈值以及阈值的判别式。这句话比较难懂,举个例子,假设c的邻域R,根据邻域R计算出阈值T1,T2,T3.....TnT_1,T_2,T_3.....T_n我们可以表示成向量T=(T1,T2,T3....Tn)T=(T_1,T_2,T_3....T_n),设计阈值判别式Q(T,pixValue)Q(T,pixValue)其中pix_value的值就是像素c(x,y)c(x,y)的灰度值,判别式返回真假,真的话像素设置为亮,否则设置成暗。
#算法内容
内容迁移至:http://www.face2ai.com/DIP-7-7-灰度图像-图像分割-阈值处理之局部阈值/

http://www.tony4ai.com/DIP-7-7-灰度图像-图像分割-阈值处理之局部阈值/

2018-03-29 14:18:43 bjbz_cxy 阅读数 13704
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19580 人正在学习 去看看 夏曹俊
的意思是界限,故阈值又叫临界值,是指一个效应能够产生的最低值或最高值。
在图像处理中它的意思是颜色转换的临界点,该方法只用于二值化的图像中
列如在自然中每一种颜色都有一个值,通常由RGB(即红、绿、蓝三原色)按比例混合就会得到各种不同的颜色。阈值处理图片是对颜色进行特殊处理的一种方法。
详细说,阈值是一个转换临界点,不管你的图片是什么样的彩色,它最终都会把图片当黑白图片处理,也就是说你设定了一个阈值之后,它会以此值作标准,凡是比该值大的颜色就会转换成白色,低于该值的颜色就转换成黑色,所以最后的结果是,你得到一张黑白的图片。

用阈值的作用:得到一张对比度不同的黑白图片

阈值可以是最小值:某一性能特征不能低于该值。
2015-10-26 16:25:08 gdut2015go 阅读数 784
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19580 人正在学习 去看看 夏曹俊

opencv2-第五章-图像处理之阈值化

完成许多处理步骤之后,通常希望对图像中的像素做出最后的决策,或直接剔除一些低于或高于一定值的像素。在opencv中,函数cvThreshold()可以完成这些任务。其基本思想是,给定一个数组和一个阈值,然后根据数组中的每个元素是低于还是高于阈值而进行一些处理。


double cvThreshold(CvArr* src, CvArr* dst, 

double threshold, double max_value, int threshold_type);

每个阈值类型对应于一个特定的比较操作,该比较操作在源图像第i个像素和阈值之间进行。根据源图像的像素和阈值之间的关系,目标图像的像素dst可能被设置为0,src或max_value。


cvThreshold中阈值类型选项和对应的操作

CV_THRESH_BINARY                 dst=(src>T)? M:0

CV_THRESH_BINARY_INV         dst= (src>T )  ? 0:M

CV_THRESH_TRUNC                 dst = (src>T) ?M:src

CV_THRESH_TOZERO_INV       dst = (src > T)? 0:src

CV_THRESH_TOZERO              dst = (src >T) ?src:0


自适应阈值

这是一种改进了的阈值技术,其中阈值本身是一个变量。

void cvAdaptiveThreshold(

CvArr* src, CvArr* dst, double max_val, 

int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C,

int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5);


cvAdaptiveThreshold有两种不同的自适应阈值方法,可以用参数adaptive_method进行设置。在这两种情况下,自适应阈值T(x,y)在每个像素点都不同。通过计算像素点周围的bxb区域的加强平均,然后减去一个常数来得到自适应阈值,b由参数block_size指定,常数由param1指定。如果使用CV_ADAPTIVE_THRESH_MEAN_C方法,那么对区域的所有像素平均加权。如果使用了CV_ADAPTIVE_THRESH_GAUSSIAN_C方法,那么区域中的(x,y)周围的像素根据高斯函数按照它们离中心的距离进行加权计算。


最后参数threshold_type和前面的cvThreshold的参数一样。


针对有很强照明或反射梯度的图像,需要根据梯度进行阈值化时,自适应阈值技术非常有用。次函数只能处理单通道8位图像或浮点图像,它要求源图像和目标图像不能使用同一图像。




//-----------------------------------【宏定义部分】-------------------------------------------- 
// 描述:定义一些辅助宏 
//------------------------------------------------------------------------------------------------ 
#define WINDOW_NAME "【程序窗口】"        //为窗口标题定义的宏 
//-----------------------------------【全局变量声明部分】--------------------------------------
// 描述:全局变量的声明
//-----------------------------------------------------------------------------------------------
int g_nThresholdValue = 100;
int g_nThresholdType = 3;
Mat g_srcImage, g_grayImage, g_dstImage;
//-----------------------------------【全局函数声明部分】--------------------------------------
// 描述:全局函数的声明
//-----------------------------------------------------------------------------------------------
static void ShowHelpText( );//输出帮助文字
void on_Threshold( int, void* );//回调函数
//-----------------------------------【main( )函数】--------------------------------------------
// 描述:控制台应用程序的入口函数,我们的程序从这里开始执行
//-----------------------------------------------------------------------------------------------
int main( )
{
//【0】改变console字体颜色
system("color 1F"); 
//【0】显示欢迎和帮助文字
ShowHelpText( );
//【1】读入源图片
g_srcImage = imread("1.jpg");
if(!g_srcImage.data ) { printf("读取图片错误,请确定目录下是否有imread函数指定的图片存在~! \n"); return false; }  
imshow("原始图",g_srcImage);
//【2】存留一份原图的灰度图
cvtColor( g_srcImage, g_grayImage, CV_RGB2GRAY );
//【3】创建窗口并显示原始图
namedWindow( WINDOW_NAME, CV_WINDOW_AUTOSIZE );
//【4】创建滑动条来控制阈值
createTrackbar( "模式",
WINDOW_NAME, &g_nThresholdType,
4, on_Threshold );
createTrackbar( "参数值",
WINDOW_NAME, &g_nThresholdValue,
255, on_Threshold );
//【5】初始化自定义的阈值回调函数
on_Threshold( 0, 0 );
// 【6】轮询等待用户按键,如果ESC键按下则退出程序
while(1)
{
int key;
key = waitKey( 20 );
if( (char)key == 27 ){ break; }
}
}
//-----------------------------------【on_Threshold( )函数】------------------------------------
// 描述:自定义的阈值回调函数
//-----------------------------------------------------------------------------------------------
void on_Threshold( int, void* )
{
//调用阈值函数
threshold(g_grayImage,g_dstImage,g_nThresholdValue,255,g_nThresholdType);
//更新效果图
imshow( WINDOW_NAME, g_dstImage );
}
//-----------------------------------【ShowHelpText( )函数】----------------------------------  
//      描述:输出一些帮助信息  
//----------------------------------------------------------------------------------------------  
static void ShowHelpText()  
{  
//输出欢迎信息和OpenCV版本
printf("\n\n\t\t\t非常感谢购买《OpenCV3编程入门》一书!\n");
printf("\n\n\t\t\t此为本书OpenCV2版的第55个配套示例程序\n");
printf("\n\n\t\t\t   当前使用的OpenCV版本为:" CV_VERSION );
printf("\n\n  ----------------------------------------------------------------------------\n");
//输出一些帮助信息  
printf( "\n\t欢迎来到【基本阈值操作】示例程序~\n\n");  
printf( "\n\t按键操作说明: \n\n"  
"\t\t键盘按键【ESC】- 退出程序\n"  
"\t\t滚动条模式0- 二进制阈值\n"  
"\t\t滚动条模式1- 反二进制阈值\n"  
"\t\t滚动条模式2- 截断阈值\n"  
"\t\t滚动条模式3- 反阈值化为0\n"  
"\t\t滚动条模式4- 阈值化为0\n"  );  
}  

这里有两个滚动条,第一个滚动条设置了4中工作模式:

\t\t滚动条模式0- 二进制阈值
滚动条模式1- 反二进制阈值  
滚动条模式2- 截断阈值
滚动条模式3- 反阈值化为0  
滚动条模式4- 阈值化为0





2018-12-23 13:18:06 lx_xin 阅读数 724
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19580 人正在学习 去看看 夏曹俊

基本概念

图像阈值分割是图像处理中最基本也是最常用的方法之一,主要用于将图像中的像素点划分为两个或者多个类别,从而得到便于处理的目标对象。

类别划分

按照阈值作用范围分:全局阈值分割,局部阈值分割;
按照阈值选取准则函数分:最大熵法,类间方差法,交叉熵法,最小误差法,模糊熵法;
按照阈值个数分:单阈值法和多阈值法;

2019-08-18 10:59:39 weixin_40586929 阅读数 118
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

    OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频培训课程概况:教程中会讲解到基于opencv视频和摄像机录制、播放和播放进度控制,多视频图像合并、多视频图像融合、剪切、视频亮度、对比度、尺寸(近邻插值(手动实现),双线性插值,图像金字塔)、颜色格式(灰度图,二值化(阈值)),旋转镜像,视频裁剪(ROI),视频水印(ROI+weight),导出处理后的视频(包含音频,使用ffmpeg工具对音频进行抽取、剪切和终于opencv处理的视频合并)。

    19580 人正在学习 去看看 夏曹俊

在图像处理的领域中,图像的阈值处理一般使得图像的像素值更单一、图像更简单。前提输入进来的图片是灰度图,那么在之后的处理当中,将像素点分开就会更加明显。可以将整幅图像分成了非黑即白的二值图像了。

Opencv中就有cv2.threshold() 可以做阈值处理。

这个函数有四个参数,待处理的图像;分类的阈值;超过阈值的像素全部赋给的值;做处理的方法。

这个函数的返回值有两个,第一个r是得到的阈值的值,第二个处理后的图像。(只是不同为什么最后要返回阈值,明明入参已经知道阈值了,这样不是多此一举吗?)

  • cv2.THRESH_BINARY(黑白二值) 
  • cv2.THRESH_BINARY_INV(黑白二值反转) 
  • cv2.THRESH_TRUNC (得到的图像为多像素值) 
  • cv2.THRESH_TOZERO (渐变至1)
  • cv2.THRESH_TOZERO_INV (渐变至0)

import cv2
img = cv2.imread('test1.jpg',0)  #0表示灰度图像, 1表示彩色图像
 
ret,thresh1 = cv2.threshold(img,1,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

以上内容如有错误,欢迎指出。谢谢!

没有更多推荐了,返回首页