导航:首页 > 源码编译 > vb图片二值化算法

vb图片二值化算法

发布时间:2022-10-15 08:40:43

❶ 用VB对图象进行黑白二值化处理的代码。

我有一个笨办法。
调用windows的“画图”打开图片,然后“另存为”黑白模式。
这两部都可以用vb实现。

❷ 如何用vb将图片二值化

Option Explicit
Dim R As Byte
Dim G As Byte
Dim B As Byte
Dim aaa As Long
Dim bbb As Byte
Dim i As Integer
Dim j As Integer
Private Sub Command1_Click()
For i = 1 To Picture1.ScaleHeight Step 15
For j = 1 To Picture1.ScaleWidth Step 15
aaa = Picture1.Point(j, i)
R = (aaa Mod 256) '取得红色值
G = (aaa Mod 65536) \ 256 '取得绿色值
B = (aaa Mod 16777216) \ 65536 '取得蓝色值
bbb = R / 3 + G / 3 + B / 3 '取得灰度值
If bbb >= 171 Then '这里bbb可作适当改变以获得最佳2值化效果
Picture2.PSet (j, i), RGB(255, 255, 255)
Else
Picture2.PSet (j, i), RGB(0, 0, 0)
End If
Next j
Next i
End Sub

❸ 求图像二值化算法,给个具体思路就好,毕设用的

思路很简单,就是深度高于某个值则是1,低于某个值则是0,具体这个值的取法,采用均方差最小计算,首先扫描整个图片,确定亮度最高和最低点,分别作为1和0,然后从1和0中间依次按一个比较小的台阶(例如先处理成256级灰度)依次作为二值化的分界,就是大于这个亮度的算1,小于的算0,然后计算所有点实际亮度与二值化以后的亮度的方差,依次遍历计算所有的分界点,计算所有的方差和,取方差和最小的分界点作为最终的分界点。
这个算法叫otsu算法,有些不负责任的人,以讹传讹写成了ostu算法。

❹ 关于VB.NET中图像二值化中的阀值法是什么意思呢

不要分
灰度图像的像素的取值范围为 0-255,0代表黑,255代表最亮,中间值是不同的亮度
图像二值化,就是通过某个判断标准,将灰度图像变成只有两个值的图像,即图像值不是0,就是255
阈值,就是这个判断标准,比如,如果阈值取100,那么图像灰度小于等于100的像素,都变成0
图像灰度大于100的,都变成255

❺ VB二值化代码怎么用

OptionExplicit

DimRAsByte

DimGAsByte

DimBAsByte

DimaaaAsLong

DimbbbAsByte

DimiAsInteger

DimjAsInteger

PrivateSubCommand1_Click()

Fori=1ToPicture1.ScaleHeightStep15

Forj=1ToPicture1.ScaleWidthStep15

aaa=Picture1.Point(j,i)

R=(aaaMod256)'取得红色值

G=(aaaMod65536)256'取得绿色值

B=(aaaMod16777216)65536'取得蓝色值

bbb=R/3+G/3+B/3'取得灰度值

Picture2.PSet(j,i),RGB(bbb,bbb,bbb)

Nextj

Nexti

EndSub

LZ:新建EXE工程,在窗体上分别添加2个PICTUREBOX,1个COMMAND控件,在Picture1控件设置其Picture属性(即选一彩色图片),执行Command1_Click,在Picture2中会出现无色彩的灰度图.

❻ 如何用VB进行图像识别

一般思路:
1、定时抓取图象
2、对图象进行灰度化,根据设定的阀值进行二值化
3、比较移动的像素数,根据标定计算距离(需要预先进行标定,即每个像素代表实际多少距离)

❼ vb 中一个菱形图片,把图片二值化后,想提取菱形4个点的坐标。

这个图就这么小吗?

❽ VB图片二值化

RGB颜色值加回来,大于127*3判为白否则为黑。

❾ VB求灰度图转二值化,或者有直接二值化的代码

用point方法太慢了,还是用api的getDIBits和setDIBits吧,彩图转灰度图的代码如下:

"gdi32"(ByValhBitmapAsLong,ByValdwCountAsLong,lpBitsAsAny)AsLong

"gdi32"(ByValhBitmapAsLong,ByValdwCountAsLong,lpBitsAsAny)AsLong

"gdi32"(ByValaHDCAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,lpBitsAsAny,lpBIAsBitMapInfo,ByValwUsageAsLong)AsLong

"gdi32"(ByValhdcAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,lpBitsAsAny,lpBIAsBitMapInfo,ByValwUsageAsLong)AsLong

PrivateTypeBitMapInfoHeader''文件信息头——BITMAPINFOHEADER

biSizeAsLong

biWidthAsLong

biHeightAsLong

biPlanesAsInteger

biBitCountAsInteger

biCompressionAsLong

biSizeImageAsLong

biXPelsPerMeterAsLong

biYPelsPerMeterAsLong

biClrUsedAsLong

biClrImportantAsLong

EndType

PrivateTypeRGBQuad

rgbBlueAsByte

rgbGreenAsByte

rgbRedAsByte

''rgbReservedAsByte

EndType

PrivateTypeBitMapInfo

bmiHeaderAsBitMapInfoHeader

bmiColorsAsRGBQuad

EndType

PrivateSubCommand1_Click()

DimixAsInteger

DimiyAsInteger

DimiWidthAsInteger'以像素为单位的图形宽度

DimiHeightAsInteger'以像素为单位的图形高度

DimbytGrayAsByte

DimbytThresholdAsByte

Dimbits()AsByte'三维数组,用于获取原彩色图像中各像素的RGB数值以及存放转化后的灰度值

DimbitsBW()AsByte'三维数组,用于存放转化为黑白图后各像素的值

'获取图形的宽度和高度

iWidth=Picture1.ScaleWidth/Screen.TwipsPerPixelX

iHeight=Picture1.ScaleHeight/Screen.TwipsPerPixelY

Picture1.Picture=Picture1.Image

'创建并初始化一个bitMapInfo自定义类型

Dimbi24BitInfoAsBitMapInfo

Withbi24BitInfo.bmiHeader

.biBitCount=32

.biCompression=0&

.biPlanes=1

.biSize=Len(bi24BitInfo.bmiHeader)

.biWidth=iWidth

.biHeight=Picture1.ScaleHeight/Screen.TwipsPerPixelY

EndWith

'重新定义数组大小

ReDimbits(3,0ToiWidth,0ToiHeight)AsByte

ReDimbitsBW(3,0ToiWidth,0ToiHeight)AsByte

'使用GetDIBits方法一次性获取picture1中各点的rgb值,比point方法或getPixel函数逐像素获取像素rgb要快出一个数量级

lrtn=GetDIBits(Picture1.hdc,Picture1.Picture.Handle,0&,iHeight,bits(0,0,0),bi24BitInfo,0&)

'数组的三个维度分别代表像素的RGB分量、以图形左下角为原点的X和Y坐标。

'具体说来,这时bits(0,2,3)代表从图形左下角数起横向第2个纵向第3个像素的Blue值,而bits(1,2,3)和bits(2,2,3)分别的Green值和Red值.

bytThreshold=128'这里定义转换为黑白图像时的阈值为128,即灰色亮度大于128的像素转为白色,小于128的像素转为黑的,此值可根据需要修改为0-255之前任意数值

Forix=0ToiWidth

Foriy=0ToiHeight

'***********RGB转为灰度的算法有多种,这里给出常见的两种*******

'bytGray=bits(0,ix,iy)*0.11+bits(1,ix,iy)*0.59+bits(2,ix,iy)*0.3'这是传统的根据三原色亮度加权得到灰阶的算法

bytGray=(bits(0,ix,iy)^2.2*0.0722+bits(1,ix,iy)^2.2*0.7152+bits(2,ix,iy)^2.2*0.2126)^(1/2.2)'这是简化sRGBIEC61966-2.1[gamma=2.20],有点类似于photoshop中所用的算法

bits(0,ix,iy)=bytGray

bits(1,ix,iy)=bytGray

bits(2,ix,iy)=bytGray

'*********转为黑白图像********

Ifbits(0,ix,iy)<bytThresholdThen

bitsBW(0,ix,iy)=0

bitsBW(1,ix,iy)=0

bitsBW(2,ix,iy)=0

Else

bitsBW(0,ix,iy)=255

bitsBW(1,ix,iy)=255

bitsBW(2,ix,iy)=255

EndIf

Next

Next

'将灰度图显示到picture2中

Picture2.Picture=Picture2.Image'如果picture2的picture属性为空,需要在setDIBits之前将其picture属性设置一下,否则无法显示出图形

SetDIBitsPicture2.hdc,Picture2.Picture.Handle,0&,iHeight,bits(0,0,0),bi24BitInfo,0&

Picture2.Picture=Picture2.Image

'将黑白图显示到picture3中

Picture3.Picture=Picture3.Image

SetDIBitsPicture3.hdc,Picture3.Picture.Handle,0&,iHeight,bitsBW(0,0,0),bi24BitInfo,0&

Picture3.Picture=Picture3.Image

EndSub

代码运行很快,如图所示图片基本可瞬间完成

阅读全文

与vb图片二值化算法相关的资料

热点内容
产品经理和程序员待遇 浏览:439
解忧程序员免费阅读 浏览:106
录像免压缩 浏览:504
总结所学过的简便算法 浏览:360
南昌哪些地方需要程序员 浏览:759
三台服务器配置IP地址 浏览:173
如何用命令方块连续对话 浏览:278
win7linux共享文件夹 浏览:304
命令符打开本地服务 浏览:599
android应用程序源码 浏览:703
安卓开发工程师简历怎么写 浏览:61
热水器水量服务器是什么意思 浏览:117
stk卫星编译 浏览:480
对后台程序员的要求 浏览:761
ios大文件夹图标 浏览:626
生的计划pdf 浏览:714
oppoa93加密便签在哪查找 浏览:21
两个数字的加减乘除运算编程 浏览:227
给手机加密码忘记了怎么办 浏览:601
单片机运算符 浏览:297