2019-12-10 15:03:20 weixin_43585712 阅读数 12
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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

三种阈值

简单阈值:是固定一个阈值(一个数)
自适应阈值:阈值即取相邻领域(小邻域-阈值)(很多阈值)
Otsu’s二值化:是自己学习一个阈值(一个数)

简单阈值

正如它的名字,直接根据给定的阈值进行判断,大于则为1,小于则为0。之前使用的熟悉的阈值函数cv2.threshold()便是这种。 这里简单回顾。其第一个参数是需要二值化的图像,第二个参数是阈值,第三个参数是当像素值高于(或小于)阈值时应该被赋予的 新像素值。OpenCV提供了多种不同的阈值方法。我们之前用的便是cv2.THRESH_BINARY。函数的返回值有两个,第二个即为二值化 以后的图像。因此不能只用一个变量接收这个函数的返回值,否则会报错的。同时需要注意的是,传入函数的图像应该是灰度图像, 而不是RGB图像,RGB的话需要先转换成灰度再传入,否则可能得到的不是你想要的结果。

import numpy as np
import cv2
from matplotlib import pyplot as plt

gray = cv2.imread("E:/ruanjianDM/jupyternoerbookDM/Opencv3/data/gray.jpg")

ret, thresh1 = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(gray, 128, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(gray, 128, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(gray, 128, 255, cv2.THRESH_TOZERO_INV)

titles = ['original', 'binary', 'binary_inv', 'trunc', 'tozero', 'tozero_inv']
imgs = [gray, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(3, 2, i + 1), plt.imshow(imgs[i], 'gray')
    plt.title(titles[i])
    plt.xticks([]), plt.yticks([]) #去除坐标轴
plt.show()

在这里插入图片描述

自适应阈值

OpenCV中自适应阈值采用cv2.adaptiveThreshold() 函数实现。OpenCV中内置了两种自适应方法,分别是cv2.ADAPTIVE_THRESH_MEAN_C和cv2.ADAPTIVE_THRESH_GAUSSIAN_C。 MEAN_C方法很简单,阈值即取相邻领域的平均值。GAUSSIAN_C方法阈值同样取自相邻领域,只是不再是平均值,而是加权平均, 权重为一个高斯窗口。所谓高斯窗口就是要让窗口服从二维的高斯正态分布。

import numpy as np
import cv2
from matplotlib import pyplot as plt
img=cv2.imread("E:/ruanjianDM/jupyternoerbookDM/Opencv3/data/ii.jpg")
#图像缩放函数 :4x4像素邻域的双三次插值
resize = cv2.resize(img, None, fx=0.6, fy=0.6, interpolation=cv2.INTER_CUBIC)

gray = cv2.cvtColor(resize, cv2.COLOR_BGR2GRAY)

ret, th1 = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)#ret=128
"""
# 第一个参数是需要二值化的图像,注意要是灰度图
# 第二个参数是大于阈值时应该被赋予的值
# 第三个参数是阈值计算方法,MEAN或GAUSSIAN二选一
# 第四个参数是阈值显示方法,只能是BINARY或BINARY_INV二选一
# 第五个参数是领域大小,注意必须是奇数,该值越大,保留的细节越少。
# 第六个参数是自定义的常数
"""
th2 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 2)
th3 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 9, 2)
cv2.imshow("original", resize)
cv2.imshow("th_binary", th1)
cv2.imshow("mean", th2)
cv2.imshow("gauss", th3)
cv2.waitKey(0)

在这里插入图片描述

Otsu’s二值化

Otsu’s简单来说就是对一幅双峰图像自动根据其灰度分布直方图计算出一个最合适的二值化阈值。对于非 双峰图像,这种方法的效果可能不理想。 在使用时,我们需要多传入一个参数:cv2.THRESH_OTSU,并且要把阈值设为0。然后程序便会根据算法找到 最优阈值,并返回给retVal。如果不使用Otsu二值化,返回的值便于我们设定的相等。

import numpy as np
import cv2
from matplotlib import pyplot as plt
imggray= cv2.imread("E:/ruanjianDM/jupyternoerbookDM/Opencv3/data/ii.jpg",0)
# 注意还要再加上一个参数
ret1, th1 = cv2.threshold(imggray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
ret2, th2 = cv2.threshold(imggray, 128, 255, cv2.THRESH_BINARY)
cv2.imshow("otsu", th1)
cv2.imshow("binary_128", th2)
cv2.waitKey(0)

在这里插入图片描述

2011-12-07 16:12:10 honesty2008 阅读数 4513
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

    19573 人正在学习 去看看 夏曹俊
一.实验题目
参照下图实现对指纹图像的基本全局阈值分割。


二.实验分析

计算基本全局阈值算法思想如下:
① 选择一个T的初始估计值②用T分割图像,生成两组像素:G1由所有灰度值大
于T的像素组成,而G2由所有灰度值小于或等于T的像素组成
③ 对区域G1和G2中的所有像素计算平均灰度值µ1和µ2
④ 计算新的阈值⑤重复步骤②到④,直到逐次迭代所得的T值之差小于事先定义的参数T0
求出阈值T1后,将原图像中小于T1的赋值为0,否则赋值为1,显示该图像即可。

三.实验程序

I=imread('images_chapter_10\Fig10.29(a).jpg');
subplot(2,2,1);imshow(I);title('原图');
subplot(2,2,2);imhist(I);title('原图的直方图');
% I=double(I);
%T 建议初始化为图像中最大强度值和最小亮度值的平均值
% T=0.5*(double(min(I(:)))+double(max(I(:))));
% T=mean(I(:));
T=0;%阈值初始化值
T0=0.5; %预定偏差大小
done=false;num=0;%迭代次数
while ~done
g=I>=T;
%由于g或者~g有可能为空,因此必须分情况处理
if(size(I(g),1)==0)T1=mean(I(~g));
elseif(size(I(~g),1)==0)T1=mean(I(g));
else T1=0.5*(mean(I(g))+mean(I(~g)));
end
done=abs(T-T1)<=T0;
T=T1;
num=num+1;
end
T=uint8(T);I2=I>=T;
%graythresh可以直接求出阈值,该函数采用Ostu方法,与通过迭代产生的阈值几乎没有区别.
%注意:由于graythresh产生的阈值已被归一化到范围[0,1]内,必须在使用时将其缩放到相应
%的范围,如uint8类图像,需要乘以255.
T1=graythresh(I)*255; 
subplot(2,2,[3 4]);imshow(I2);title('基本全局阈值算法处理结果');
xlabel(['通过程序求得的阈值为',num2str(T),',迭代次数为',num2str(num)]);


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

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

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

基本概念

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

类别划分

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

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

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

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


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

2017-04-08 09:45:38 Brain011 阅读数 2727
  • 学习OpenCV3.2+QT5+ffmpeg实战开发视频编辑器视频教程

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

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

最近工作需要,开始学习图像处理啦。我们使用的软件是Adaptive Vision Studio。不过是收费的哟。无基础学习。所以先加强一下子基础啦咯
这里写图片描述


前期准备:

直方图

灰度直方图:不同灰度值的像素分量分别占像素总数的概率分布
p(rk) = nk/MN;
rk:第k级的像素个数
MN:像素总数/行数 * 像素总数/列数
P(rk):归一化概率直方图

图像分割

输入图像,提取图像属性
一张图像R,可以分割为不同区域R1,R2,…,Rn

这里写图片描述


阈值处理(区域分割)

灰度阈值处理基础

—–《数字图像处理》

粗略的计算一下,阈值T
T= (对象的灰度值+背景的灰度值)/ 2

Emgucv图像处理二

阅读数 3844

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

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