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

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

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


学习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-灰度图像-图像分割-阈值处理之局部阈值/

2019-01-10 11:04:19 qq_42887760 阅读数 146
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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

图像阈值(threshold)

  • 简单点说是把图像分割的标尺,这个标尺是根据什么产生的,阈值产生算法?阈值类型。(Binary segmentation)二进制分割
  • OpenCV提供函数 cv :: threshold 来执行阈值操作。
    在这里插入图片描述
    1. src_gray:我们的输入图片
    2. dst:目标(输出)图像
    3. threshold_value:进行阈值操作的阈值
    4. max_BINARY_value:二进制阈值操作使用的值(设置所选像素)
    5. threshold_type:5个阈值操作之一。
  • 在阈值类型前,怎么寻找阈值? 除了主动输入,还可以用 THRESH_OTSU 、 THRESH_TRIANGLE 两种opencv提供的算法产生阈值(只适用于颜色数据是8位的图像,否则报错)

1. 阈值类型一阈值二值化(threshold binary)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述

2. 阈值类型一阈值反二值化(threshold binary Inverted)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述

3. 阈值类型一截断 (truncate)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述

4. 阈值类型一阈值取零 (threshold to zero)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述

5. 阈值类型一阈值反取零 (threshold to zero inverted)

  • 左下方的图表示图像像素点Src(x,y)值分布情况,蓝色水平线表示阈值
    在这里插入图片描述
    在这里插入图片描述

总结

在这里插入图片描述

代码示例

#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;

Mat src,gray_src,dst;
char input_win[]="Input Windows",output_win[]="Output Windows";
int threshold_type=3,threshold_value=0;
int const max_value=255,max_type=4;
void Threshold_Demo(int, void* );

int main(){
	//1. 加载图像和显示原图
	src=imread("E:/Experiment/OpenCV/Pictures/dog2.jpg");
	if(src.empty()){
		printf("could not load image...");
		return -1;
	}
	namedWindow(input_win,CV_WINDOW_AUTOSIZE);
	namedWindow(output_win,CV_WINDOW_AUTOSIZE);
	imshow(input_win,src);//显示图片

	//2、如果是BGR,我们将其转换为灰度。可以使用函数cv :: cvtColor:
	cvtColor(src,gray_src,CV_BGR2GRAY);

	//3、为用户创建2个轨道栏以输入用户输入:
	createTrackbar("阈值类型:",output_win, &threshold_type, max_type, Threshold_Demo);
	createTrackbar("阈值大小:",output_win, &threshold_value, max_value, Threshold_Demo);

	Threshold_Demo(0,0);



	//不主动设置阈值,通过 THRESH_OTSU 或 THRESH_TRIANGLE 产生阈值,这个时候 threshold_value 参数不会起作用
	Mat dst1,dst2;
	int threshold_max=255;
    //THRESH_OTSU 是迭代找到颜色数据最大最小值,然后找出一个阈值
    //THRESH_TRIANGLE 如果图像中的对象是一样的(颜色都是一个色调),用这个寻找阈值更好
    threshold(gray_src, dst1, threshold_value, threshold_max, THRESH_OTSU | threshold_type);//传参设置阈值类型
    imshow("THRESH_OTSU", dst1);
    threshold(gray_src, dst2, threshold_value, threshold_max, THRESH_TRIANGLE| threshold_type);//THRESH_TRIANGLE
    imshow("THRESH_TRIANGLE", dst2);

	waitKey(0);
	return 0;
}

void Threshold_Demo(int, void*){
	//1. src_gray:我们的输入图片
	//2. dst:目标(输出)图像
	//3. threshold_value:进行阈值操作的阈值
	//4. max_BINARY_value:二进制阈值操作使用的值(设置所选像素)
	//5. threshold_type:5个阈值操作之一。
	//参数:输入,输出,设置的阈值,maxVal,阈值类型
	threshold(gray_src, dst, threshold_value, 255, threshold_type);
	imshow(output_win, dst);
}

运行截图

在这里插入图片描述

参考博客

  1. https://blog.csdn.net/huanghuangjin/article/details/80962043
  2. https://blog.csdn.net/LYKymy/article/details/83154291
2015-03-07 11:49:55 TonyShengTan 阅读数 4148
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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


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

#开篇废话
废话开始,本来打算昨天写这篇,半路被几个孙子(大学室友)拉去打Dota,结果输了一晚上,暴雪出的魔兽争霸和魔兽世界可谓游戏中的经典,一个是完美的游戏逻辑设计,其次是游戏画面,然后就有了各路模仿者,有感而发–做面向用户的应用程序,在满足软件基本要求的基础上,完美的逻辑设计和优秀的人机交互将能使软件经久不衰。
#迭代均值算法
内容迁移至 http://www.face2ai.com/DIP-7-3-灰度图像-图像分割-阈值处理之迭代均值阈值/

http://www.tony4ai.com/DIP-7-3-灰度图像-图像分割-阈值处理之迭代均值阈值/

2018-12-02 10:55:25 shanwenkang 阅读数 1419
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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

阈值

我们将图像分块最简单的方法就是设定一个阈值对图像进行二值化处理,那么这个阈值我们应该如何选择呢

对于图像的直方图存在明显边界的图像,我们可以很容易找到这个阈值,但是如果图像直方图分界不明显,那么这个阈值的寻找将变得十分困难。因此我们存在全局阈值与局部阈值两种

全局阈值

全局阈值就是在整幅图像中我们只有一个阈值来对图像进行二值化,但是其存在其局限性,例如图像中存在高斯噪声的情况下,我们无法找到一个很好的阈值将图像的边界分开

另外如果图像的边界是在局部对比下出现的,即不同位置阈值不同,那么全局阈值的效果也非常不好

我们先不管全局阈值的缺点,我们来看看我们如何通过计算来获得这个全局阈值T呢?我们又OTSU'S算法

下面是一些数学概念在图像上的体现

OTSU算法就是想把图像分为两个块,然后使得这两个块之间的方差最大,也就是最大化两个块的均值与全局均值的差的平方

由于只存在这么一个阈值,那么我们在计算的时候可以简单地让这个值遍历0-255,然后找到σB最大的值,这个值就是我们要的阈值。我们可以理解为这个值把图像分为了相距最远的两块。我们在matlab中有graythresh这个函数来实现这个过程

下图就显示了一个OTSU算法不是很理想的例子

为了克服以上缺点我们有两点解决方法:1.先通过低通滤波器去噪再用OTSU 2.只在考虑边缘部分的像素来计算阈值,这样可以大大减少其他不重要部分对阈值计算过程的影响

局部阈值

下面让我们来看看局部阈值/自适应阈值。它的原理就是将图像分块,对于不同的部分应用不同的阈值,在matlab中我们有blockproc这个函数来实现这个过程

我们看到相比于之前,效果确实有很大的提升,但是缺点也特别明显,就是图像会出现分块化

我们可以调小块的大小,但是这样的话会出现如果块内像素值变化不大的话,块内像素被全部分作黑或白而缺失了边界(例如右上角窗户的上方黑色的窗框内有白色的像素块)。因此块的选择是十分重要的

更好的方式是我们在每个像素周围的一个区域内来计算阈值,根据这个块内的均值方差来计算这个像素的值是1还是0

RGB图阈值

除了将阈值在灰度图上应用,我们还可以将其应用在RGB图中,我们可以设定一种颜色,来得到与这种颜色相近颜色的物体

例如我们取下图丝带的颜色可以得到如右图的结果

 

 

2019-01-17 17:56:12 qq_34814092 阅读数 322
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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

Java OpenCV-4.0.0 图像处理10 图像阈值操作

Java OpenCV-4.0.0 图像阈值操作

是把图像分割的标尺,比如说如果像素值大于阈值,则会分配一个值(可能为白色),否则会分配另一个值(可能为黑色)

package com.xu.image;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

/**  
 * 
 * @Title: Image.java   
 * @Description: OpenCV-4.0.0 测试文件
 * @Package com.xu.test   
 * @author: xuhyacinth     
 * @date: 2019年12月10日20:17:11
 * @version: V-1.0.0 
 * @Copyright: 2019 xuhyacinth
 *
 */
public class Image {

	static {
		System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
	}

	public static void main(String[] args) {
		threshold();
	}

	/**
	 * OpenCV-4.0.0 阈值处理
	 * @return: void  
	 * @date: 2019年12月10日20:17:11
	 */
	public static void threshold() {
		Mat src= Imgcodecs.imread("C:\\Users\\Administrator\\Pictures\\99.png");
		Mat dst=new Mat();
		Mat gry=new Mat();
		Imgproc.cvtColor(src,gry,Imgproc.COLOR_RGB2GRAY);
		Imgproc.threshold(gry,dst,75,255,Imgproc.THRESH_BINARY_INV);
		//THRESH_BINARY = 0,
		//THRESH_BINARY_INV = 1,
		//THRESH_TRUNC = 2,
		//THRESH_TOZERO = 3,
		//THRESH_TOZERO_INV = 4,
		//THRESH_MASK = 7,
		//THRESH_OTSU = 8,
		//THRESH_TRIANGLE = 16;
		HighGui.imshow("阈值处理",dst);
		HighGui.waitKey(0);
	}

}

阈值处理

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

博文 来自: gdut2015go
没有更多推荐了,返回首页