❶ 用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
代碼運行很快,如圖所示圖片基本可瞬間完成