OpenCv 2.3.1 使用出现的问题!

 
 
 初次使用Opencv 2.3.1发现出现的错误情况不少。
1 把原来delphi 7 下的opencv 1.0更换为2.3.1就出现缺少dll文件信息。目录确认没有问题。弄了一个早上重新编译了好几次突然就好了,现在也没有弄明白是怎么回事。
2 好不容易可以用opencv 2.3.1 了,在操作过程中又会出现Invalid Floating point operation错误信息
3 只好在cvThreshold 函数之前使用showmessage()暂停一下突然发现程序不再出现错误信息。我的程序中使用了两次cvThreshold所以要使用showmessage()两次才可以,比较麻烦。
4 我进行了一个测试,如果我用opencv1.0中的cvThreshold就不会出现问题。现在只好 2.3.1和1.0混用。不过这不是个办法,到底他们有什么改变。
function TFrmReceiveTray.GetImageFromCamera(): PIplImage;
var
Img: PIplImage;
begin
Img := cvQueryFrame(capture);
if not (assigned(Img)) then
begin

Img := nil;
Result := Img;
exit;
end;
cvFlip(Img, Img, -1); //绕y轴旋转
result := Img;
end;

procedure TFrmReceiveTray.DisplayImage(Img: PIplImage; Image: TImage);
var
bmp1: TBitmap;
rec1: TRect;
begin
bmp1 := TBitmap.Create;
bmp1.PixelFormat := pf24bit;
IplImage2Bitmap(Img, bmp1);
rec1 := Image.canvas.ClipRect;
Image.canvas.StretchDraw(rec1, bmp1);
bmp1.Free;
end;


下面是图像处理过程
OriginalImage := GetImageFromCamera;
if OriginalImage = nil then
begin
ShowMessage('没有获取到图片,请检查摄像头是否正常工作');
exit;
end;

frame := cvCreateImage(cvSize_(OriginalImage.Width * 1, OriginalImage.Height * 1), 8, 3);
frame := cvCloneImage(OriginalImage);
//cvResize(OriginalImage, frame, CV_INTER_lINEAR);

dstframe := cvCreateImage(cvSize_(frame.Width, frame.Height), IPL_DEPTH_8U, 3);

cvThreshold(frame, dstframe, TBarThresold.Position, 255.0, CV_THRESH_BINARY); //取阀值为50把图像转为二值图像
DisplayImage(dstframe, Image1);
Exit;
这个过程在一个按钮事件中,当我模拟用户按下按键第八次的时候就会出现错误提示信息。
如果我在事件中不使用cvThreshold就没有任何问题。或者在cvThreshold设置断点连续运行的时候也不会出现错误信息。

呵呵 问题终于解决了我再delphi中把cvThreshold申明为procedure了,我看源代码的时候是funciton是有返回值的。


































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值