❶ 用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
代码运行很快,如图所示图片基本可瞬间完成