Image processing vb6.0中的水平sobel溢出

Image processing vb6.0中的水平sobel溢出,image-processing,vb6,Image Processing,Vb6,我在Vb 6.0中实现了水平sobel检测器,但在(grand)值中出现“溢出”错误,下面是我编写的sobel函数: Public Sub HorSobel() Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer Dim X As Integer, Y As Integer, i As Integer, J As Integer 'Pic5.Cls Dim Grand As Double Grad =

我在Vb 6.0中实现了水平sobel检测器,但在(grand)值中出现“溢出”错误,下面是我编写的sobel函数:

Public Sub HorSobel()
Dim Op_X(-1 To 1, -1 To 1) As Integer, Op_Y(-1 To 1, -1 To 1) As Integer
Dim X As Integer, Y As Integer, i As Integer, J As Integer
'Pic5.Cls
Dim Grand As Double
Grad = 0
Op_X(-1, -1) = -1: Op_X(0, -1) = -2: Op_X(1, -1) = -1
Op_X(-1, 0) = 0: Op_X(0, 0) = 0: Op_X(1, 0) = 0
Op_X(-1, 1) = 1: Op_X(0, 1) = 2: Op_X(1, 1) = 1



For Y = 0 To Pic1.Height - 1
    For X = 0 To Pic1.Width - 1
        GradX = 0: GradY = 0: Grad = 0
        If X = 0 Or Y = 0 Or X = Pic1.Width - 1 Or Y = Pic1.Height - 1 Then
            Grad = 0
        Else
            For i = -1 To 1
                For J = -1 To 1
                PixelValue = GetPixel(Pic5.hdc, X + i, Y + J)

                GradX = GradX + (PixelValue * Op_X(i, J))

                Next J
            Next i
            Grad = Round(Sqr(Abs(GradX * GradX)))
        End If
        If Grad <= 0 Then Grad = 0: If Grad >= 255 Then Grad = 255
        SetPixel Pic6.hdc, X, Y, RGB(Grad, Grad, Grad)
        'Pic5.Refresh
    Next X
Next Y
Pic6.Refresh
Public Sub-HorSobel()
将运筹X(-1到1,-1到1)作为整数,运筹Y(-1到1,-1到1)作为整数
尺寸X为整数,Y为整数,i为整数,J为整数
'Pic5.Cls
双倍的
梯度=0
Op_X(-1,-1)=-1:Op_X(0,-1)=-2:Op_X(1,-1)=-1
Op_X(-1,0)=0:Op_X(0,0)=0:Op_X(1,0)=0
Op_X(-1,1)=1:Op_X(0,1)=2:Op_X(1,1)=1
对于Y=0到Pic1。高度-1
对于X=0到Pic1,宽度为-1
GradX=0:GradY=0:Grad=0
如果X=0或Y=0或X=Pic1.宽度-1或Y=Pic1.高度-1,则
梯度=0
其他的
对于i=-1对1
对于J=-1对1
PixelValue=GetPixel(Pic5.hdc,X+i,Y+J)
GradX=GradX+(像素值*Op_X(i,J))
下一个J
接下来我
梯度=圆形(Sqr(Abs(梯度x*梯度x)))
如果结束
如果梯度=255,则梯度=255
设置像素Pic6.hdc、X、Y、RGB(渐变、渐变、渐变)
“图5.刷新
下一个X
下一个Y
图6.刷新

End Sub

您尚未在提供的代码中声明以下变量:

  • 梯度
  • 格拉德
  • 格雷迪
  • 像素值

如果您将它们声明为Long或Integer,那么这可能就是出现溢出错误的原因。

在这种情况下,也许您可以提供最小数量的代码来重现问题,并且可以在不更改任何代码的情况下工作!在您发布的代码中,Grand变量根本没有赋值。。。当错误发生时,请使用F8进入您的代码,并张贴实际触发错误的行