实心矩形图像识别问题,期待!!!
大家好,我想在图像中找到一个矩形的位置,矩形是黑色实心的。图像是白纸黑字扫描成的。角度无法固定。
请问,无论何种角度扫描,我怎么找到矩形的位置。包括矩形的长宽,对角线坐标,越详细越好!!
[解决办法]
图上除了“黑色实心的矩形”还有什么?
[解决办法]
贴张图出来看看
[解决办法]
楼主去年的帖子还没结呢.
你要的是机器视觉,这一课题不是很简单,类似以前我见过的一套PCB自动抄板软件,卖价15W.
只需要给出一张无元件的单或双面PCB正反面的照片,它会自动生成PRETOL99的PCB图格式,很牛的.
具体原理没有研究过,帮顶吧.
[解决办法]
楼主想得太简单了.
[解决办法]
由于已知仅有一个矩形,问题没有“人工视觉”那么复杂。
逐行扫描,将结果分为两种情况。
1 矩形是水平的。此情况下,每行黑色点的起始坐标相同。取得起始 X 坐标、起始 Y 坐标、终止 X 坐标、终止 Y 坐标,就可以得到四角坐标。
2 矩形是倾斜的。这样每行的 X 起始坐标会不同。此情况下只要取得最高点、最低点、最左点,最右点坐标,就是矩形的 4 个顶点。剩下的都是简单的解析几何计算。
需要考虑的是,扫描中的近似处理。因为扫描所得的点,与数学理想的点会有误差。
[解决办法]
图像如上:
我是教师,想做个用数码技术识别机读卡的软件。我想检测出边框四条直线的方程,
我用hough变换检测出来很慢,没有多大的使用价值!
[解决办法]
Option Explicit
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Const Pi = 3.14159265358979
Private Type Myline
topx As Integer
topy As Integer
botx As Integer
boty As Integer
End Type
Private Sub Command1_Click()
Dim bmWidth As Long
Dim bmHeight As Long
Dim Dc As Long
Dim MaxLength As Long, Alpha As Integer
Dim i As Long, j As Long, m As Long, Length As Long
Dim IpMyLine() As Myline, lpDistAlpha() As Long, maxd As Long
Dim MaxdLine As Myline, secondmaxd As Myline, midvalue() As Long
bmWidth = Picture1.Width / Screen.TwipsPerPixelX
bmHeight = Picture1.Height / Screen.TwipsPerPixelY
Dc = Picture1.hdc
MaxLength = CLng(Sqr(bmWidth * bmWidth + bmHeight * bmHeight) + 0.5)
Alpha = 180
ReDim IpMyLine(MaxLength * Alpha) As Myline
ReDim lpDistAlpha(0 To MaxLength * Alpha) As Long
ReDim midvalue(MaxLength * Alpha) As Long
For i = 1 To MaxLength * Alpha
IpMyLine(i).boty = 32767 '初始化最低点的y坐标为一个很大的值
Next
For i = 1 To bmHeight
For j = 1 To bmWidth
'If iDATA(1, j, i) = 0 Then '是个黑点
If GetPixel(Dc, j, i) = vbBlack Then
For m = 0 To 179
Length = CLng(Abs(j * Cos(m * Pi / 180) + i * Sin(m * Pi / 180))) 'i,j点的s值随角度变换
lpDistAlpha(Length * Alpha + m) = lpDistAlpha(Length * Alpha + m) + 1 '乘ALPHA=90是因为每次都要加m/2
If i > IpMyLine(Length * Alpha + m).topy Or j > IpMyLine(Length * Alpha + m).topx Then
IpMyLine(Length * Alpha + m).topx = j
IpMyLine(Length * Alpha + m).topy = i
End If
If i < IpMyLine(Length * Alpha + m).boty Or j < IpMyLine(Length * Alpha + m).topx Then
IpMyLine(Length * Alpha + m).botx = j
IpMyLine(Length * Alpha + m).boty = i
End If
Next
End If
Next
Next
maxd = 0
For i = 1 To MaxLength * Alpha
If lpDistAlpha(i) >= maxd Then
maxd = lpDistAlpha(i)
MaxdLine.topx = IpMyLine(i).topx
MaxdLine.topy = IpMyLine(i).topy
MaxdLine.botx = IpMyLine(i).botx
MaxdLine.boty = IpMyLine(i).boty
End If
Next
MsgBox MaxdLine.topx & " " & MaxdLine.topy & " " & MaxdLine.botx & " " & MaxdLine.boty
Picture1.Line (MaxdLine.topx * Screen.TwipsPerPixelX, MaxdLine.topy * Screen.TwipsPerPixelY)-(MaxdLine.botx * Screen.TwipsPerPixelX, MaxdLine.boty * Screen.TwipsPerPixelY), vbRed
End Sub
————————————————————————————————————
以上是源码,速度太慢。
[解决办法]
创科公司开发出新一代图像识别开发平台CkVision4.5,该平台集成BLOB分析,对象计数、几何匹配、灰度匹配、字符识别、条码识别、测圆、卡尺测量、外经内经测量、颜色识别、图像基本运算(二值化、比例变换、开运算、闭运算、膨胀、腐蚀、滤波)等功能。接口函数丰富有DLL和OCX。支持VB、VC等开发工具。在OCX功能表中,每个功能之间都坐标联系接口,提高了功能之间的整合性能。另外创科提供打大量的范例代码以帮助开发者对图像识别的开发速度。
【详情请联系】 深圳市创科自动化控制技术有限公司电话:0755-33938283 手机:13480974764 联系人:黎 友(先生) http://www.szcktech.com mail:szcktech@163.com
VB DEMO 下载地址:
http://www.namipan.com/d/VB%20CKVISION%20DEMO.rar/48c872cf2528d3a7dc6461927ae66115017a674778300e00
[解决办法]
如果只是对于这一特定问题不必做得那么复杂,线扫描确定纸张的四个定点,然后进行几何矫正,(因为没有扭曲,所以只要经过简单的线性变换就可以生成标准图像,具体变换矩阵可以参考遥感图像矫正,或者加我QQ,我帮你试试)矫正后的图像每个选项的位置基本固定,可预定义常量点数组(每个选项的中心点),通过该点的颜色识别就可以了,至于其他就是评分的函数,注意不能只检测正确的是否涂色,当心有学生非法多选(我当时就干过)。