線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1520
推到 Plurk!
推到 Facebook!

视频检测遇到问题

尚未結案
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-09-05 15:30:53 IP:219.148.xxx.xxx 未訂閱
我现在的视频检测遇到个问题,程序能运行,但不理想。 我是想在浏览图象时,在图象窗口用鼠标任意画条红线,(竖直的),当物体(项目中是汽车)撞到红线时,触发抓图。 当视频图象在dspack中的vidowwindow载入近来时,我又参照dspack\demo\d6-d7\playVideoCap的这个例子中的callBack,让图象在image中实时显示,因为我可以很容易在image中取得象素值。而很难在videoWindow取得象素值。 之后我用timer每隔100ms取一遍平均灰度值。 timer的代码如下: procedure TVideoForm.Timer4Timer(Sender: TObject); type pArr =^TRGBTripleArray; TRGBTripleArray = array [Byte] of TRGBTriple; var xp:PArr; x,y,i,sum:integer; avgGray_second:integer;//后一次平均灰度值 Gray:array of integer; begin sum:=0; SetLength(Gray,img_1.Picture.Bitmap.Height); img_1.Picture.Bitmap.PixelFormat:=pf24Bit; for y:=0 to img_1.Picture.Bitmap.Height-1 do begin xp:=img_1.Picture.Bitmap.ScanLine[y]; Gray[y]:=round(xp[2].rgbtRed*0.3) round(xp[2].rgbtGreen*0.59) round(xp[2].rgbtBlue*0.11); end; for i:=0 to img_1.Picture.Bitmap.Height-1 do begin sum:=sum Gray[i]; end; avgGray_second:=round(sum/img_1.Picture.Bitmap.Height); //四舍五入 求平均灰度 if bz_gray then //这个boolean变量为全局变量,用途就是判断是否为第二次采集平均灰度,因为第一次时,没法两次比较 begin if avgGray_second - avgGray_first > strtoint(Edit1.Text) then 抓拍图象按钮.Click(); // Edit1.Text为我在界面上任意设定的 阈值, end; avgGray_first:=avgGray_second; //avgGray_first我是在全局变量中声明的。为前一次平均灰度值 bz_gray:=true; end; 上面的我是取image中x=2的这列的灰度值,相当于红线就是x=2. 而我实际画红线是在image上面在放置一个透明的image22,在这个上面画红线。之后把红线的x值赋值给image。上面的就相当于赋的值是x=2. 我的不理想的地方是:运行正常,不过运行一段时间,就弹出英文错误。好象是地址不对,时间间隔越短,出错几率越大,不过,时间我还不能设置太大,否则汽车已经通过了。 请问有谁能帮我消除错误,或有更好的方法,判断汽车撞到红线。
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-09-05 15:41:22 IP:219.148.xxx.xxx 未訂閱
我自己先顶一下。
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-09-05 21:55:52 IP:219.82.xxx.xxx 未訂閱
jinzihan_009:你好! 我自不量力,猜測一下,會不會出現平均灰度爲0的情況,也就是沒有汽車經過時的空背景太白? 祝順心! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-09-06 08:47:02 IP:222.33.xxx.xxx 未訂閱
to WoodTiger: 很高兴又看到你的回复,我想不是你说的空背景太白,因为,我测试时是在室内测试的,图象背景也不是很单一,还没有到室外测试(运动物体用手、书本其他代替汽车)
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-09-06 08:56:59 IP:222.33.xxx.xxx 未訂閱
每次在弹出错误后,程序自动停在了“Gray[y]:=round(xp[2].rgbtRed*0.3) round(xp[2].rgbtGreen*0.59) round(xp[2].rgbtBlue*0.11);”这句话的前面。
WoodTiger
初階會員


發表:35
回覆:90
積分:25
註冊:2003-08-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-09-06 09:07:18 IP:60.191.xxx.xxx 未訂閱
引言: 每次在弹出错误后,程序自动停在了“Gray[y]:=round(xp[2].rgbtRed*0.3) round(xp[2].rgbtGreen*0.59) round(xp[2].rgbtBlue*0.11);”这句话的前面。
時間越短,出錯越多?會不會是在計算灰度的時候,圖像本身處於建立與釋放的過程中,也就是你在計算灰度的時候,圖像已經變化了,在你取下另一個灰度值的時候,圖像剛釋放或還沒來得及建立。 這段代碼是不是應該寫在SampleGrabber的onbuffer事件中? 祝順心! ================================== 搞得懂就答人,搞不懂就問人,沒有人懂還可以問神!
------
-=-=-=-=-=-=-=-=-=-=-=
Eveything as your wish.
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-09-06 14:32:00 IP:222.33.xxx.xxx 未訂閱
to WoodTiger: 我现在在外面,不在单位,今天可能测试不了了。明天一早就马上测试,你说的意见很有可能。我会调试的。谢谢,明天上午我就会回帖。
jinzihan_009
一般會員


發表:12
回覆:41
積分:10
註冊:2005-07-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-09-07 08:47:46 IP:219.148.xxx.xxx 未訂閱
我今天心情特别好,又一次在你的帮助下,解决了一个技术难点(对我来说),今早测试,把代码改在了你说的地方,成功实现,没有报错。速度很理想。再次感谢你。 能留下你的msn号码吗?QQ也可以。还有email? 我的MSN:jinzihan_005@hotmail.com qq:9076629 EMAIL:jinzihan_007@yahoo.com
系統時間:2024-03-29 22:15:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!