python图像处理学习笔记
文章目录
1.二值化 Thresholding
2.大津二值法 Otsu's Method
3.HSV与RGB互相转换
4.色彩减少
5.平均池化
6.最大池化
卷积滤波
7.高斯滤波
8. Motion Filter
9.差分滤波器
10.Sobel与Prewitt滤波器
11.Laplacian滤波器
12.Emboss滤波器
13.LoG滤波器
1.二值化 Thresholding
def binarization(img, th=128):
img[img < th] = 0
img[img >= th] = 255
return img
img得到的数组当作索引,是一个很棒的技巧
2.大津二值法 Otsu’s Method
一种自动确定阈值的二值化方法
PyCharm报错:AttributeError: ‘NoneType’ object has no attribute ‘astype’ 大概率是文件路径不对
def otsu_binarization ( img, th= 128 ) :
max_sigma = 0
max_t = 0
for _t in range ( 1 , 255 ) :
v0 = out[ np. where( out < _t) ]
m0 = np. mean( v0) if len ( v0) > 0 else 0 .
w0 = len ( v0) / ( H * W)
v1 = out[ np. where( out >= _t) ]
m1 = np. mean( v1) if len ( v1) > 0 else 0 .
w1 = len ( v1) / ( H * W)
sigma = w0 * w1 * ( ( m0 - m1) ** 2 )
if sigma > max_sigma:
max_sigma = sigma
max_t = _t
print ( "threshold >>" , max_t)
th = max_t
out[ out < th] = 0
out[ out >= th] = 255
return out
定义一个分离度
,包含类间方差与类内方差两个影响因素。遍历所有阈值,使得这个分离度取得最高的阈值,便是那个最佳的阈值
。
3.HSV与RGB互相转换
H:hue,色相,从0取值至360,代表了所有的颜色,例如0和360代表红色,180代表青色 S:saturation,饱和度,0<=S<1,代表颜色纯度。S=max-min V:value,亮度,0<=V<1。V=max
一张图片求反色,可行的方法是将图片由RGB转向HSV,然后将H+180,再转回RGB
下面的转换程序需要注意这样几点
使用np.imread读取的图片,通道顺序是(y,x,c)-->计算机是先说图片的高、再说图片的宽、最后说通道
1.1其中c的顺序是B->G->R 1.2reshape()与.shape中的通道顺序都是z->y->x
1.3我们常说一张图片尺寸为 1080 × 720 1080\times 720 1 0 8 0 × 7 2 0 ,这个顺序是x->y
。口头的说法与imread读取的结果相反
.copy()
这种浅拷贝与直接赋值(赋引用)效果很接近 需要区别的是.deepcopy()
hsv[..., 0]
与hsv[:,:,0]
同含义
np.argmin(img, axis=2)表示按图片中的第三个方向(c方向)进行比较与压缩
,求得最小值的索引 –>由此便知道了整张图片的每个像素中,哪个通道最弱 5.解释下.where()的用法,它返回的是索引tuple
>> > a = np. array( [ 2 , 4 , 6 , 8 , 10 ] )
>> > np. where( a > 5 )
( array( [ 2 , 3 , 4 ] ) , )
>> > a[ np. where( a > 5 ) ]
array( [ 6 , 8 , 10 ] )
>> > np. where( [ [ 0 , 1 ] , [ 1 , 0 ] ] )
( array( [ 0 , 1 ] ) , array( [ 1 , 0 ] ) )
示例程序:
def BGR2HSV ( _img) :
img = _img. copy( ) / 255 .
hsv = np. zeros_like( img, dtype= np. float32)
max_v = np. max ( img, axis= 2 ) . copy( )
min_v = np. min ( img, axis= 2 ) . copy( )
min_arg = np. argmin( img, axis= 2 )
hsv[ . . . , 0 ] [ np. where( max_v == min_v) ] = 0
ind = np. where( min_arg == 0 )
hsv[ . . . , 0 ] [ ind] = 60 * ( img[ . . . , 1 ] [ ind] - img[ . . . , 2 ] [ ind] ) / ( max_v[ ind] - min_v[ ind] ) + 60
ind = np. where( min_arg == 2 )
hsv[ . . . , 0 ] [ ind] = 60 * ( img[ . . . , 0 ] [ ind] - img[ . . . , 1 ] [ ind] ) / ( max_v[ ind] - min_v[ ind] ) + 180
ind = np. where( min_arg == 1 )
hsv[ . . . , 0 ] [ ind] = 60 * ( img[ . . . , 2 ] [ ind] - img[ . . . , 0 ] [ ind] ) / ( max_v[ ind] - min_v[ ind] ) + 300
hsv[ . . . , 1 ] = max_v. copy( ) - min_v. copy( )
hsv[ . . . , 2 ] = max_v. copy( )
return hsv
def HSV2BGR ( _img, hsv) :
img = _img. copy( ) / 255 .
max_v = np. max ( img, axis= 2 ) . copy( )
min_v = np. min ( img, axis= 2 ) . copy( )
out = np. zeros_like( img)
H = hsv[ . . . , 0 ]
S = hsv[ . . . , 1 ]
V = hsv[ . . . , 2 ]
C = S
H_ = H / 60 .
X = C * ( 1 - np. abs ( H_ % 2 - 1 ) )
Z = np. zeros_like( H)
vals = [ [ Z, X, C] , [ Z, C, X] , [ X, C, Z] , [ C, X, Z] , [ C, Z, X] , [ X, Z, C] ]
for i in range ( 6 ) :
ind = np. where( ( i <= H_) & ( H_ < ( i+ 1 ) ) )
out[ . . . , 0 ] [ ind] = ( V - C) [ ind] + vals[ i] [ 0 ] [ ind]
out[ . . . , 1 ] [ ind] = ( V - C) [ ind] + vals[ i] [ 1 ] [ ind]
out[ . . . , 2 ] [ ind] = ( V - C) [ ind] + vals[ i] [ 2 ] [ ind]
out[ np. where( max_v == min_v) ] = 0
out = np. clip( out, 0 , 1 )
out = ( out * 255 ) . astype( np. uint8)
return out
4.色彩减少
即色彩量化,使得RGB的值只能取[32,96,160,224],可以用来压缩图像,但是也会使得图像质量变差
def dicrease_color ( img) :
out = img. copy( )
out = out // 64 * 64 + 32
return out
//
是取商运算符,如7//2结果为3 代码中的out
是一个三通道的图像,在对其进行运算时,是对其中的所有数进行操作
5.平均池化
将整个图片网格(grid)化,再对其中的每一个网格进行求均值,得到的均值作为整个网格的值,这种操作就是池化。其实得到的效果与打码无异。
def my_pooling ( img, G= 8 ) :
H, W, C = img. shape
out = np. zeros( ( H, W, C) , np. uint8)
Nh = int ( H/ G)
Wh = int ( W/ G)
print ( img. dtype)
print ( ( np. zeros( ( H, W, C) , np. int ) ) . dtype)
for y in range ( Nh) :
for x in range ( Wh) :
for c in range ( C) :
out[ G* y: G* ( y+ 1 ) , G* x: G* ( x+ 1 ) , c] = np. mean( img[ G* y: G* ( y+ 1 ) , G* x: G* ( x+ 1 ) , c] ) . astype( np. int )
return out
注意图像初始化时,其类型一定要是uint8,不能指为int–>默认指的是int32
6.最大池化
与平均池化类似,先将图片网格化,再求每个网格的最大值作为整个网格的代表。相当于加高亮度的打码
卷积滤波
7.高斯滤波
1.高斯滤波常用来去噪,类似作用的还有中值滤波(取中间值)、均值滤波(取平均值)、LoG(Laplacian of Gaussian)滤波器,都可用来去噪。 2.从有无kernel的角度来讲,中值滤波与均值滤波是同一类,它们没有一个固定的卷积kernel 3.高斯滤波的kernel权重由二维高斯函数(二维正态分布)给出,有了kernel以后,对整个图片进行滑动窗口卷积 即可。 4.由于图片的长宽一般不是kernel尺寸的的整数倍,因此我们需要在图片的边缘补0,这种方法称为zero padding ,并且卷积核要进行归一化 操作。 4.1 可以想象,对于一个 3 × 3 3\times 3 3 × 3 的卷积核,那么填充的边缘尺寸应该为1;对于一个 7 × 7 7\times 7 7 × 7 的卷积核,需要填充的尺寸应该是3。由此可以总结出公式: P a d d i n g = S i z e k e r n e l / / 2 Padding = Size_{kernel} // 2 P a d d i n g = S i z e k e r n e l / / 2 5.这里的高斯滤波对图像的三个通道都进行了计算,不需要转换为灰度图 6.边缘检测一般都需要针对灰度图进行 7.ndarray的相乘就是对位相乘,得到的是一个同规模的ndarray ,对结果矩阵进行求和,就相当于进行了卷积
def gaussian_filter ( img, K_size= 3 , sigma= 1.3 ) :
if len ( img. shape) == 3 :
H, W, C = img. shape
else :
img = np. expand_dims( img, axis= - 1 )
H, W, C = img. shape
pad = K_size // 2
out = np. zeros( ( H + pad * 2 , W + pad * 2 , C) , dtype= np. float )
out[ pad: pad + H, pad: pad + W] = img. copy( ) . astype( np. float )
K = np. zeros( ( K_size, K_size) , dtype= np. float )
for x in range ( - pad, - pad + K_size) :
for y in range ( - pad, - pad + K_size) :
K[ y + pad, x + pad] = np. exp( - ( x ** 2 + y ** 2 ) / ( 2 * ( sigma ** 2 ) ) )
K /= ( 2 * np. pi * sigma * sigma)
K /= K. sum ( )
tmp = out. copy( )
for y in range ( H) :
for x in range ( W) :
for c in range ( C) :
out[ pad + y, pad + x, c] = np. sum ( K * tmp[ y: y + K_size, x: x + K_size, c] )
out = np. clip( out, 0 , 255 )
out = out[ pad: pad + H, pad: pad + W] . astype( np. uint8)
return out
8. Motion Filter
其卷积核如下所示 K = [ 1 3 0 0 0 1 3 0 0 0 1 3 ] K=\begin{bmatrix} \frac{1}{3}&0&0\\ 0&\frac{1}{3}&0\\ 0&0&\frac{1}{3} \end{bmatrix} K = ⎣ ⎡ 3 1 0 0 0 3 1 0 0 0 3 1 ⎦ ⎤ 取对角线像素的均值。处理后的结果看起来很动感
def my_motion_filter ( img, ksize= 3 ) :
H, W, C = img. shape
kernel = np. diag( [ 1 ] * ksize) . astype( float )
kernel /= ksize
pad = ksize// 2
out = np. zeros( ( H+ pad* 2 , W+ pad* 2 , C) , dtype= float )
print ( out. shape)
out[ pad: pad + H, pad: pad + W] = img. copy( ) . astype( np. float )
for y in range ( H) :
for x in range ( W) :
for c in range ( C) :
out[ pad + y, pad + x, c] = np. sum ( kernel * out[ y: y + ksize, x: x + ksize, c] )
out = out[ pad: pad + H, pad: pad + W] . astype( np. uint8)
return out
9.差分滤波器
纵向
K = [ 0 − 1 0 0 1 0 0 0 0 ] K=\begin{bmatrix} 0&-1&0\\ 0&1&0\\ 0&0&0 \end{bmatrix} K = ⎣ ⎡ 0 0 0 − 1 1 0 0 0 0 ⎦ ⎤ 横向
K = [ 0 0 0 − 1 1 0 0 0 0 ] K=\begin{bmatrix} 0&0&0\\ -1&1&0\\ 0&0&0 \end{bmatrix} K = ⎣ ⎡ 0 − 1 0 0 1 0 0 0 0 ⎦ ⎤
直接初始化卷积核然后卷积即可
def different_filter ( img, K_size= 3 ) :
H, W, C = img. shape
pad = K_size // 2
out = np. zeros( ( H + pad * 2 , W + pad * 2 ) , dtype= np. float )
out[ pad: pad + H, pad: pad + W] = gray. copy( ) . astype( np. float )
tmp = out. copy( )
out_v = out. copy( )
out_h = out. copy( )
Kv = [ [ 0 . , - 1 . , 0 . ] , [ 0 . , 1 . , 0 . ] , [ 0 . , 0 . , 0 . ] ]
Kh = [ [ 0 . , 0 . , 0 . ] , [ - 1 . , 1 . , 0 . ] , [ 0 . , 0 . , 0 . ] ]
for y in range ( H) :
for x in range ( W) :
out_v[ pad + y, pad + x] = np. sum ( Kv * ( tmp[ y: y + K_size, x: x + K_size] ) )
out_h[ pad + y, pad + x] = np. sum ( Kh * ( tmp[ y: y + K_size, x: x + K_size] ) )
out_v = np. clip( out_v, 0 , 255 )
out_h = np. clip( out_h, 0 , 255 )
out_v = out_v[ pad: pad + H, pad: pad + W] . astype( np. uint8)
out_h = out_h[ pad: pad + H, pad: pad + W] . astype( np. uint8)
return out_v, out_h
10.Sobel与Prewitt滤波器
略
11.Laplacian滤波器
K = [ 0 1 0 1 − 4 1 0 1 0 ] K=\begin{bmatrix} 0&1&0\\ 1&-4&1\\ 0&1&0 \end{bmatrix} K = ⎣ ⎡ 0 1 0 1 − 4 1 0 1 0 ⎦ ⎤ 对灰度图进行二阶导得到的核
12.Emboss滤波器
K = [ − 2 − 1 0 − 1 1 1 0 1 2 ] K=\begin{bmatrix} -2&-1&0\\ -1&1&1\\ 0&1&2 \end{bmatrix} K = ⎣ ⎡ − 2 − 1 0 − 1 1 1 0 1 2 ⎦ ⎤ 得到的轮廓更加清晰
13.LoG滤波器
对图像进行高斯滤波器平滑之后再使用拉普拉斯滤波器使得图像轮廓更加清晰 这是为了防止拉普拉斯滤波器使噪声增强了
彩色图像分为:索引图像(用索引代表颜色)与真彩色图像(RGB代表图像) 图像质量评价受主观因素的影响
你可能感兴趣的:(图像处理)
OpenCV(一个C++人工智能领域重要开源基础库) 简介
愚梦者
OpenCV 人工智能 人工智能 opencv c++ 图像处理 计算机视觉 开源
返回:OpenCV系列文章目录(持续更新中......)上一篇:OpenCV4.9.0配置选项参考下一篇:OpenCV4.9.0开源计算机视觉库安装概述引言:OpenCV(全称OpenSourceComputerVisionLibrary)是一个基于开放源代码发行的跨平台计算机视觉库,可以用来进行图像处理、计算机视觉和机器学习等领域的开发。该库由英特尔公司于1999年开始开发,最初是为了加速处理器
Android 实现照片抠出人像。
No Promises﹉
android
谢谢阅览、关注!!一、各平台的实现方式:1.Android实现方式:使用图像处理库(如OpenCV):集成OpenCV库,利用其图像处理功能进行边缘检测和图像分割;使用机器学习模型(如TensorFlowLite):集成TensorFlowLite和预训练的人像分割模型;使用第三方API服务:利用如百度AI、腾讯AI等提供的在线API进行图像处理。步骤:集成必要的库或API、加载和处理图像、应用抠
[C++] 图像处理
DiamondC++
笔记 c++
额打算用FreeType获取字体像素,然后贴在一张图上然后这个就是图像处理工具,只有复制和镜像,但足够了(旋转缩放难倒我了)使用完成后需要手动释放资源(干脆用智能指针它不香吗)代码#ifndef__IMAGE_PROCESSING_HPP__#define__IMAGE_PROCESSING_HPP__#includetypedefunsignedintuint;typedefunsignedch
Dockerfile多阶段构建
是小叶啊
容器技术 docker dockerfile
前言我们在构建docker镜像时,希望最后得到的镜像越小越好,但是在构建时,总是会用到各种各样复杂的环境,大部分都是临时环境,只是为了生成对应的目标程序。比如我们经常会在OpenCV环境下编译图像处理类程序,但其实目标程序只需要用的之前生成的子程序就行,不需要引入中间用到的环境。这里我们就能用到Dockerfile多阶段构建,它可以把前面多个阶段生成的文件拷贝到下一个阶段使用,并且不引入之前用到的
基于Python和OpenCV的产品码识别与验证案例
GT开发算法工程师
python opencv 开发语言 人工智能 计算机视觉
引言:本案例展示了如何使用Python结合OpenCV库来实现产品码的识别与验证。首先,通过图像预处理技术(如灰度化、二值化、降噪等)优化产品码图像,然后利用OpenCV中的模板匹配或机器学习算法(如SVM、神经网络等)来定位并识别产品码。目录原理:代码部分:注意:原理:产品码识别与验证的核心在于图像处理与模式识别技术。首先,通过图像处理技术提取出产品码区域,去除背景干扰,增强产品码的可识别性。然
opendronemap集群搭建
Robber2000
云计算 容器 运维 云原生
需求OpenDroneMap(ODM)是一个开源项目,旨在利用无人机采集的图像数据生成地图、模型和其他地理空间数据。它主要解决以下问题:航空摄影数据处理:ODM可以处理无人机拍摄的大量航空图像数据,通过图像处理和计算机视觉技术生成高质量的地图和模型。地图制作与更新:利用ODM,用户可以快速、成本效益地生成地图,并及时更新地理空间数据,有助于城市规划、灾害监测等领域的应用。三维建模:ODM可以生成精
Canny详解
kxg916361108
计算机视觉 图像处理 人工智能
Canny边缘检测是一种经典的图像处理技术,被广泛应用于计算机视觉和图像处理领域。它由JohnF.Canny在1986年提出,是一种多阶段的边缘检测算法,具有高精度和低错误率的特点。Canny边缘检测的步骤:高斯滤波(GaussianBlur):Canny边缘检测首先对图像进行高斯平滑处理,以减少图像中的噪声。高斯滤波器将图像中的每个像素与周围像素进行加权平均,从而模糊图像并减少噪声。计算图像梯度
MATLAB图像拼接算法及实现
程序员小溪
算法 matlab 计算机视觉 MATLAB 人工智能
图像拼接算法及实现(一)论文关键词:图像拼接图像配准图像融合全景图论文摘要:图像拼接(imagemosaic)技术是将一组相互间重叠部分的图像序列进行空间匹配对准,经重采样合成后形成一幅包含各图像序列信息的宽视角场景的、完整的、高清晰的新图像的技术。图像拼接在摄影测量学、计算机视觉、遥感图像处理、医学图像分析、计算机图形学等领域有着广泛的应用价值。一般来说,图像拼接的过程由图像获取,图像配准,图像
Python图像处理【21】基于卷积神经网络增强微光图像
AI technophile
Python图像处理实战 python 图像处理 cnn
基于卷积神经网络增强微光图像0.前言1.MBLLEN网络架构2.增强微光图像小结系列链接0.前言在本节中,我们将学习如何基于预训练的深度学习模型执行微光/夜间图像增强。由于难以同时处理包括亮度、对比度、伪影和噪声在内的所有因素,因此微光图像增强一直是一项具有挑战性的问题。为了解决这一问题,提出了多分支微光增强网络(multi-branchlow-lightenhancementnetwork,MB
悟空图像工具箱:一站式在线图像处理与GIF制作利器!
AiBoxss
图像处理 人工智能 计算机视觉
悟空图像工具箱简介:悟空图像工具箱是一款集成了多种图像处理和GIF制作功能的在线工具箱,用户无需下载安装任何软件,只需在网页上操作即可完成各种任务。这款工具箱旨在帮助用户更高效地进行图像处理和GIF制作,提高工作效率。【Ai-321.com】超多实用AI工具集,助你快速写作、绘画、视频创作,赶紧免费体验!悟空图像工具箱功能列表:图片转GIF:将多张图片合成为GIF动图。视频转GIF:将视频转换为G
深入了解OpenCVSharp中常见的图像处理功能
仰望大佬007
图像处理 opencv 计算机视觉 c#
深入了解OpenCVSharp中常见的图像处理功能前言1.图像加载与保存2.图像基本操作3.图像滤波4.边缘检测5.图像分割6.特征检测与描述子7.目标识别与跟踪8.图像融合与拼接9.形状匹配与模板匹配10.颜色空间转换与直方图11.图像转换与绘制12.图像分类与机器学习13.高级图像处理算法14.GPU加速与并行计算前言OpenCVSharp是C#语言中用于图像处理和计算机视觉的开源库,它提供了
Numpy快速入门(1)
胡乱儿起个名
python基础 numpy
文章目录一、Numpy是什么?二、基础知识1.数组创建2.数组的索引、切片和迭代3.形状操纵一、Numpy是什么? NumPy是一个开源的Python库,提供了多维数组对象(ndarray)和用于处理这些数组的函数。它是科学计算和数据分析的基础库之一,被广泛应用于各种领域,包括数值计算、数据处理、机器学习、图像处理等。二、基础知识 NumPy的主要对象是同构多维数组。它是一个元素表(通常是数字
从玩游戏到写外挂,C语言/C++程序员大神是怎样做到的!
小辰带你看世界
今天和大家分享一下我自己的C语言学习的过程,与大家共勉。嗯,由于我本人水平有限,出现错误在所难免,希望大家看到后能够指出来,以便大家共同进步。C语言是面向过程的,而C++是面向对象的这些是C/C++能做的服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等首先我来讲
octave 与 matlab
UPUPUPEveryday
matlab 开发语言
octave与matlab联系与区别Octave和Matlab是两种数字计算和科学编程语言。它们之间有很多联系和区别。联系:Octave和Matlab都是为了进行数值计算和科学编程而设计的,它们都具有很强的数值计算和矩阵操作的能力。Octave和Matlab都支持向量化的操作,使得对矩阵和向量的运算更加高效。Octave和Matlab都提供了丰富的数学函数库,包括线性代数、信号处理、图像处理等领域
压缩感知中的稀疏基是什么?
superdont
计算机视觉入门 计算机视觉 人工智能 python opencv 算法
要压缩感知中,涉及到要将信号转换为稀疏形式。此时,需要用到的就是稀疏基。稀疏基可能是傅里叶基或者小波基。例如,如下参考文献提到:参考基傅里叶基和小波基是用于信号处理和图像处理中的常用数学工具,它们能够帮助我们在不同的基下表示信号,便于对信号的分析、压缩和重建。傅里叶基(FourierBasis):傅里叶基是一组复指数函数(对于连续信号)或者傅里叶级数(对于离散信号),可以用来表示周期性信号。对于任
图像处理ASIC设计方法 笔记4 异步FIFO
徐丹FPGA之路
异构计算 FPGA 笔记 图像处理 fpga开发
P66异步FIFO这段对FIFO的描述很精彩:理解了水位信号的含义(相当于通常所说的满/空标志,注意读时钟域的空信号,写时钟域的满信号,只能在它各自的时钟域直接使用,如果要在另一时钟域用,需要使用同步器)FIFO可以理解为一个传输数据的管道,写入一方顺序将数据压入管道的一端,读出一方从管道的另一端按照写入的顺序依次取出数据(所以叫先进先出)。由于进行顺序读写,FIFO不需要地址线,所以减少端口引线
matlab计算正交变换,图像的正交变换matlab.pdf
大Victor
matlab计算正交变换
图像的正交变换matlab《数字图像处理》课程实验报告实验名:图像的正交变换实验1院系:自动化测试与控制系班级:1201132姓名:李丹阳学号:1120110113哈尔滨工业大学电气工程及自动化学院光电信息工程2015年12月13日一、实验原理二、实验内容三、实验结果与分析1、傅立叶变换A)绘制一个二值图像矩阵,并将其傅立叶函数可视化。(傅里叶变换A)的实验结果B)利用傅立叶变换分析两幅图像的相关
ps自学视频教程资源,Photoshop初、中、高级网盘教程大全2024
全网优惠分享君
Photoshop是一款功能强大的图像处理软件,广泛应用于广告、摄影、设计等领域。对于想要学习Photoshop的人来说,找到一套系统、全面的教程是非常重要的。在这里,小编为大家整理了一份Photoshop初、中、高级网盘教程大全,帮助大家快速掌握Photoshop的使用技巧。一、初级教程对于初学者来说,首先需要掌握的是Photoshop的基础知识和操作技巧。以下是一些必备的初级教程:1.Phot
OpenCL 图像处理函数、图像放缩和插值
陈塬升
OpenCL c++ 算法
1.OpenCL提供了大量可以在内核中运行的图像处理函数,它们大致可以分为以下三类:(1)Readfunctiongs--返回给定坐标上的颜色取值;(2)writefunctiongs--设定给定坐标上的颜色取值;(3)Informationfunctions--提供关于图像对象的信息,例如图像的维度以及像素属性;图像读取函数是从图像对象中读取向量,他们各自的参数基本一样。唯一的区别是函数返回的是
最近发现了很多好用的工具,推荐给大家
ʚ小华
编辑器 贴图
截图工具(PixPin):目前只有windows,还没有mac版本,非常强大!!!PixPin是一款优秀的图像标注工具,它可以帮助用户在图像上添加注释、标记和说明。这个软件适用于各种不同的场景,例如教育、商业、设计和医学等领域的图像处理和注释需求。高效率:PixPin的直观界面和丰富的注释工具使用户可以更快地完成图像标注任务。同时,它还支持云端同步和导出功能,使得用户可以轻松地共享和交流注释内容。
图片批量添加文字水印
巴鶴
为了版权安全,可以给自己设计的图片设置批量文字水印功能思路分析为图片添加文字水印,主要用到PIL库中的相应类,PIL是一个Python图像处理库,它支持多种文件格式,并提供了强大的图像处理和图形处理能力,本例中主要使用PIL库的Image模块、ImageDraw模块、ImageFont模块和ImageEnhance模块,作用分别如下:Image模块:该模块中提供了一个与模块同名的Image类,用来
Baumer工业相机堡盟相机彩色相机如何实现白平衡
格林威
工业相机 数码相机 opencv c++ 计算机视觉 开发语言
项目场景Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。Baumer工业相机中彩色相机具有色彩还原度真实的特性,适用于颜色分析的工业应用。技术背景Baumer工业彩色相机由于传感
图像预处理技术与算法
木子n1
算法 嵌入式开发 算法 数码相机 计算机视觉
图像预处理是计算机视觉和图像处理中非常关键的第一步,其目的是为了提高后续算法对原始图像的识别、分析和理解能力。以下是一些主要的图像预处理技术:1.图像增强:对比度调整:通过直方图均衡化(HistogramEqualization)等方法改善图像整体或局部的对比度。伽玛校正:改变图像的亮度特性,用于补偿显示器或其他硬件设备的非线性响应。锐化处理:如使用高通滤波器(如拉普拉斯算子、Sobel边缘检测算
金线检测步骤
耿直小伙
算法
半导体行业,金线检测是必不可以少的一个检测项,除了焊点,die面,手指以外的必检项目.重难点在于金线的提取,算法多种多样,找到适合才是关键,涉及到打光,图像处理,这里不做深入分析,软件和硬件配合好才能做的最好.经典算法Block分析,结合图像检测.高斯算法提取边缘检测算法提取这几种算法各有利弊,经典算法的适用性一般,对图像质量要求高,鲁棒性好.高斯算法,参数难调,鲁棒性差一点,但是提取的准确度高.
中科星图——影像卷积核函数Kernel之gaussian高斯核函数核算子、Laplacian4核算子和square核算子等的分析
此星光明
中科星图 计算机视觉 人工智能 深度学习 核函数 高斯 卷积 云计算
简介高斯核函数是图像处理中常用的一种卷积核函数。它是一种线性滤波器,可以实现图像的平滑处理。在图像处理中,高斯核函数的卷积操作可以用于去噪、平滑和模糊等任务。高斯核函数的定义可以表示为一个二维高斯分布函数,表达式如下:G(x,y)=(1/(2*pi*sigma^2))*exp(-(x^2+y^2)/(2*sigma^2))其中,x和y表示图像中的像素位置,sigma表示高斯分布的标准差。高斯核函数
相机图像质量研究(29)常见问题总结:图像处理对成像的影响--图像插值Demosaic
上天肖
ISP 计算机视觉 数码相机 人工智能
系列文章目录相机图像质量研究(1)Camera成像流程介绍相机图像质量研究(2)ISP专用平台调优介绍相机图像质量研究(3)图像质量测试介绍相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距相机图像质量研究(5)常见问题总结:光学结构对成像的影响--景深相机图像质量研究(6)常见问题总结:光学结构对成像的影响--对焦距离相机图像质量研究(7)常见问题总结:光学结构对成像的影响--镜片
计算机科学引论2021英文,计算机科学引论= Computing Essentials : 英文
弗雷德里克·雷蒙德
计算机科学引论2021英文
摘要:本书概括地介绍了计算机科学与信息技术的主要领域,各种应用及其对社会的影响.全书由15章和一些附录组成,主要内容包括:信息技术概述;因特网,万维网与电子商务;基本应用软件(包括字处理,表处理,数据库管理系统,文字和图形演示,集成化软件包等);专用软件(包括图形图像处理,音频与视频,多媒体,Web创作以及虚拟现实和专家系统等新兴应用);操作系统等系统软件;计算机系统组成部件;输入/输出及相关外部
OpenCV统计函数之minMaxLoc和meanStdDev
忙什么果
opencv C&C++ opencv 人工智能 计算机视觉
在OpenCV中,minMaxLoc和meanStdDev是两个用于统计图像或数组中元素的基本特性的函数。这些统计函数对于图像处理、特征提取和数据分析非常有用。minMaxLocminMaxLoc函数用于查找数组或图像中的最小值和最大值,并可选地返回这些值的位置。这在处理图像时特别有用,比如在动态调整对比度或进行阈值操作之前确定图像的亮度范围。voidminMaxLoc(InputArraysrc
e_ophtha_MA眼底数据集—根据微血管瘤标注Mask绘制Contour轮廓图
curemoon
眼底医学图像处理:微血管瘤Microaneurysm检测分割采用数据集e_ophtha中的e_ophtha_MA,此数据集可从互联网下载实现根据微血管瘤标注Mask,在原图绘制轮廓图,以直观了解微血管瘤,以便检测分割微血管瘤1.可展示数据集中原图和绘制轮廓图的并列拼接图2.可保存Mask,原图,根据标注绘制轮廓图的眼底图的拼接图1.原图和绘制轮廓图的并列拼接图2.保存Mask,原图,根据标注绘制轮
计算机视觉与图像处理面试题,深度学习图像处理算法工程师面试题
ZW9
计算机视觉与图像处理面试题
AI开发平台ModelArtsModelArts是面向开发者的一站式AI开发平台,为机器学习与深度学习提供海量数据预处理及半自动化标注、大规模分布式Training、自动化模型生成,及端-边-云模型按需部署能力,帮助用户快速创建和部署模型,管理全周期AI工作流。按需/包周期付费可选,最低0.00元/小时引入MoXingFramework模块||https://support.huaweicloud
Spring4.1新特性——Spring MVC增强
jinnianshilongnian
spring 4.1
目录
Spring4.1新特性——综述
Spring4.1新特性——Spring核心部分及其他
Spring4.1新特性——Spring缓存框架增强
Spring4.1新特性——异步调用和事件机制的异常处理
Spring4.1新特性——数据库集成测试脚本初始化
Spring4.1新特性——Spring MVC增强
Spring4.1新特性——页面自动化测试框架Spring MVC T
mysql 性能查询优化
annan211
java sql 优化 mysql 应用服务器
1 时间到底花在哪了?
mysql在执行查询的时候需要执行一系列的子任务,这些子任务包含了整个查询周期最重要的阶段,这其中包含了大量为了
检索数据列到存储引擎的调用以及调用后的数据处理,包括排序、分组等。在完成这些任务的时候,查询需要在不同的地方
花费时间,包括网络、cpu计算、生成统计信息和执行计划、锁等待等。尤其是向底层存储引擎检索数据的调用操作。这些调用需要在内存操
windows系统配置
cherishLC
windows
删除Hiberfil.sys :使用命令powercfg -h off 关闭休眠功能即可:
http://jingyan.baidu.com/article/f3ad7d0fc0992e09c2345b51.html
类似的还有pagefile.sys
msconfig 配置启动项
shutdown 定时关机
ipconfig 查看网络配置
ipconfig /flushdns
人体的排毒时间
Array_06
工作
========================
|| 人体的排毒时间是什么时候?||
========================
转载于:
http://zhidao.baidu.com/link?url=ibaGlicVslAQhVdWWVevU4TMjhiKaNBWCpZ1NS6igCQ78EkNJZFsEjCjl3T5EdXU9SaPg04bh8MbY1bR
ZooKeeper
cugfy
zookeeper
Zookeeper是一个高性能,分布式的,开源分布式应用协调服务。它提供了简单原始的功能,分布式应用可以基于它实现更高级的服务,比如同步, 配置管理,集群管理,名空间。它被设计为易于编程,使用文件系统目录树作为数据模型。服务端跑在java上,提供java和C的客户端API。 Zookeeper是Google的Chubby一个开源的实现,是高有效和可靠的协同工作系统,Zookeeper能够用来lea
网络爬虫的乱码处理
随意而生
爬虫 网络
下边简单总结下关于网络爬虫的乱码处理。注意,这里不仅是中文乱码,还包括一些如日文、韩文 、俄文、藏文之类的乱码处理,因为他们的解决方式 是一致的,故在此统一说明。 网络爬虫,有两种选择,一是选择nutch、hetriex,二是自写爬虫,两者在处理乱码时,原理是一致的,但前者处理乱码时,要看懂源码后进行修改才可以,所以要废劲一些;而后者更自由方便,可以在编码处理
Xcode常用快捷键
张亚雄
xcode
一、总结的常用命令:
隐藏xcode command+h
退出xcode command+q
关闭窗口 command+w
关闭所有窗口 command+option+w
关闭当前
mongoDB索引操作
adminjun
mongodb 索引
一、索引基础: MongoDB的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的优化技巧。下面是创建索引的命令: > db.test.ensureIndex({"username":1}) 可以通过下面的名称查看索引是否已经成功建立: &nbs
成都软件园实习那些话
aijuans
成都 软件园 实习
无聊之中,翻了一下日志,发现上一篇经历是很久以前的事了,悔过~~
断断续续离开了学校快一年了,习惯了那里一天天的幼稚、成长的环境,到这里有点与世隔绝的感觉。不过还好,那是刚到这里时的想法,现在感觉在这挺好,不管怎么样,最要感谢的还是老师能给这么好的一次催化成长的机会,在这里确实看到了好多好多能想到或想不到的东西。
都说在外面和学校相比最明显的差距就是与人相处比较困难,因为在外面每个人都
Linux下FTP服务器安装及配置
ayaoxinchao
linux FTP服务器 vsftp
检测是否安装了FTP
[root@localhost ~]# rpm -q vsftpd
如果未安装:package vsftpd is not installed 安装了则显示:vsftpd-2.0.5-28.el5累死的版本信息
安装FTP
运行yum install vsftpd命令,如[root@localhost ~]# yum install vsf
使用mongo-java-driver获取文档id和查找文档
BigBird2012
driver
注:本文所有代码都使用的mongo-java-driver实现。
在MongoDB中,一个集合(collection)在概念上就类似我们SQL数据库中的表(Table),这个集合包含了一系列文档(document)。一个DBObject对象表示我们想添加到集合(collection)中的一个文档(document),MongoDB会自动为我们创建的每个文档添加一个id,这个id在
JSONObject以及json串
bijian1013
json JSONObject
一.JAR包简介
要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包:
1.commons-lang-2.0.jar
2.commons-beanutils-1.7.0.jar
3.commons-collections-3.1.jar
&n
[Zookeeper学习笔记之三]Zookeeper实例创建和会话建立的异步特性
bit1129
zookeeper
为了说明问题,看个简单的代码,
import org.apache.zookeeper.*;
import java.io.IOException;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ThreadLocal
【Scala十二】Scala核心六:Trait
bit1129
scala
Traits are a fundamental unit of code reuse in Scala. A trait encapsulates method and field definitions, which can then be reused by mixing them into classes. Unlike class inheritance, in which each c
weblogic version 10.3破解
ronin47
weblogic
版本:WebLogic Server 10.3
说明:%DOMAIN_HOME%:指WebLogic Server 域(Domain)目录
例如我的做测试的域的根目录 DOMAIN_HOME=D:/Weblogic/Middleware/user_projects/domains/base_domain
1.为了保证操作安全,备份%DOMAIN_HOME%/security/Defa
求第n个斐波那契数
BrokenDreams
今天看到群友发的一个问题:写一个小程序打印第n个斐波那契数。
自己试了下,搞了好久。。。基础要加强了。
&nbs
读《研磨设计模式》-代码笔记-访问者模式-Visitor
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.ArrayList;
import java.util.List;
interface IVisitor {
//第二次分派,Visitor调用Element
void visitConcret
MatConvNet的excise 3改为网络配置文件形式
cherishLC
matlab
MatConvNet为vlFeat作者写的matlab下的卷积神经网络工具包,可以使用GPU。
主页:
http://www.vlfeat.org/matconvnet/
教程:
http://www.robots.ox.ac.uk/~vgg/practicals/cnn/index.html
注意:需要下载新版的MatConvNet替换掉教程中工具包中的matconvnet:
http
ZK Timeout再讨论
chenchao051
zookeeper timeout hbase
http://crazyjvm.iteye.com/blog/1693757 文中提到相关超时问题,但是又出现了一个问题,我把min和max都设置成了180000,但是仍然出现了以下的异常信息:
Client session timed out, have not heard from server in 154339ms for sessionid 0x13a3f7732340003
CASE WHEN 用法介绍
daizj
sql group by case when
CASE WHEN 用法介绍
1. CASE WHEN 表达式有两种形式
--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE
WHEN sex = '1' THEN
PHP技巧汇总:提高PHP性能的53个技巧
dcj3sjt126com
PHP
PHP技巧汇总:提高PHP性能的53个技巧 用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量, 单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的函数译注: PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍
Yii框架中CGridView的使用方法以及详细示例
dcj3sjt126com
yii
CGridView显示一个数据项的列表中的一个表。
表中的每一行代表一个数据项的数据,和一个列通常代表一个属性的物品(一些列可能对应于复杂的表达式的属性或静态文本)。 CGridView既支持排序和分页的数据项。排序和分页可以在AJAX模式或正常的页面请求。使用CGridView的一个好处是,当用户浏览器禁用JavaScript,排序和分页自动退化普通页面请求和仍然正常运行。
实例代码如下:
Maven项目打包成可执行Jar文件
dyy_gusi
assembly
Maven项目打包成可执行Jar文件
在使用Maven完成项目以后,如果是需要打包成可执行的Jar文件,我们通过eclipse的导出很麻烦,还得指定入口文件的位置,还得说明依赖的jar包,既然都使用Maven了,很重要的一个目的就是让这些繁琐的操作简单。我们可以通过插件完成这项工作,使用assembly插件。具体使用方式如下:
1、在项目中加入插件的依赖:
<plugin>
php常见错误
geeksun
PHP
1. kevent() reported that connect() failed (61: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastc
修改linux的用户名
hongtoushizi
linux change password
Change Linux Username
更改Linux用户名,需要修改4个系统的文件:
/etc/passwd
/etc/shadow
/etc/group
/etc/gshadow
古老/传统的方法是使用vi去直接修改,但是这有安全隐患(具体可自己搜一下),所以后来改成使用这些命令去代替:
vipw
vipw -s
vigr
vigr -s
具体的操作顺
第五章 常用Lua开发库1-redis、mysql、http客户端
jinnianshilongnian
nginx lua
对于开发来说需要有好的生态开发库来辅助我们快速开发,而Lua中也有大多数我们需要的第三方开发库如Redis、Memcached、Mysql、Http客户端、JSON、模板引擎等。
一些常见的Lua库可以在github上搜索,https://github.com/search?utf8=%E2%9C%93&q=lua+resty。
Redis客户端
lua-resty-r
zkClient 监控机制实现
liyonghui160com
zkClient 监控机制实现
直接使用zk的api实现业务功能比较繁琐。因为要处理session loss,session expire等异常,在发生这些异常后进行重连。又因为ZK的watcher是一次性的,如果要基于wather实现发布/订阅模式,还要自己包装一下,将一次性订阅包装成持久订阅。另外如果要使用抽象级别更高的功能,比如分布式锁,leader选举
在Mysql 众多表中查找一个表名或者字段名的 SQL 语句
pda158
mysql
在Mysql 众多表中查找一个表名或者字段名的 SQL 语句:
方法一:SELECT table_name, column_name from information_schema.columns WHERE column_name LIKE 'Name';
方法二:SELECT column_name from information_schema.colum
程序员对英语的依赖
Smile.zeng
英语 程序猿
1、程序员最基本的技能,至少要能写得出代码,当我们还在为建立类的时候思考用什么单词发牢骚的时候,英语与别人的差距就直接表现出来咯。
2、程序员最起码能认识开发工具里的英语单词,不然怎么知道使用这些开发工具。
3、进阶一点,就是能读懂别人的代码,有利于我们学习人家的思路和技术。
4、写的程序至少能有一定的可读性,至少要人别人能懂吧...
以上一些问题,充分说明了英语对程序猿的重要性。骚年
Oracle学习笔记(8) 使用PLSQL编写触发器
vipbooks
oracle sql 编程 活动 Access
时间过得真快啊,转眼就到了Oracle学习笔记的最后个章节了,通过前面七章的学习大家应该对Oracle编程有了一定了了解了吧,这东东如果一段时间不用很快就会忘记了,所以我会把自己学习过的东西做好详细的笔记,用到的时候可以随时查找,马上上手!希望这些笔记能对大家有些帮助!
这是第八章的学习笔记,学习完第七章的子程序和包之后