赞
踩
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs,OpenCV,IPL,cvCAm, StdCtrls, ExtCtrls, ComCtrls;
- const
- THRESHOLD = 10;
- THRESHOLD_MAX_VALUE = 255;
- CONTOUR_MAX_LEVEL = 1;
- LINE_THICKNESS = 2;
- LINE_TYPE = 8;
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Button2: TButton;
- Memo1: TMemo;
- Button3: TButton;
- Button4: TButton;
- Label1: TLabel;
- Panel1: TPanel;
- Image1: TImage;
- Panel2: TPanel;
- Image2: TImage;
- Panel3: TPanel;
- Image3: TImage;
- Panel4: TPanel;
- Image4: TImage;
- TrackBar1: TTrackBar;
- Edit1: TEdit;
- TrackBar2: TTrackBar;
- Edit2: TEdit;
- Edit3: TEdit;
- Button5: TButton;
- Edit4: TEdit;
- Edit5: TEdit;
- Edit6: TEdit;
- Button6: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- procedure TrackBar1Change(Sender: TObject);
- procedure TrackBar2Change(Sender: TObject);
- procedure Button5Click(Sender: TObject);
- procedure Button6Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- src : pIplImage = 0; //定义源图像指针
- tmp : pIplImage = 0; //定义临时图像指针
- src_back: pIplImage = 0; //定义源图像背景指针
- dst_gray: pIplImage = 0; //定义源文件去掉背景后的目标灰度图像指针
- dst_bw : pIplImage = 0; //定义源文件去掉背景后的目标二值图像指针
- dst_contours : pIplImage = 0; //定义轮廓图像指针
- element : pIplConvKernel = 0; //定义形态学结构指针
- Number_Object :integer=0; //定义目标对象数量
- contour_area_tmp :integer = 0; //定义目标对象面积临时寄存器
- contour_area_sum :integer= 0; //定义目标所有对象面积的和
- contour_area_ave :integer= 0; //定义目标对象面积平均值
- contour_area_max :integer= 0; //定义目标对象面积最大值
- stor: pCvMemStorage = nil;
- cont: pCvSeq = 0;
- cont1: pCvSeq = 0;
- Cfont: CvFont ;
- C1font: pCvFont ;
- a_contour: pCvSeq = 0;
- capture: PCvCapture;
- frame: PIplImage=0;
- frame1: PIplImage=0;
- MFrame:PIplImage=0;
- image: PIplImage=0;
- g_Gray: PIplImage=0;
- t_Gray: PIplImage=0;
- bmp: TBitmap;
- sz:PCvSize;
- track_box: CvBox2D;
- implementation
- {$R *.dfm}
-
-
- procedure TForm1.TrackBar1Change(Sender: TObject);
- begin
- edit1.Text:=IntToStr(TrackBar1.Position);
- end;
- procedure TForm1.TrackBar2Change(Sender: TObject);
- begin
- edit2.Text:=IntToStr(TrackBar2.Position);
- end;
-
- procedure TForm1.Button5Click(Sender: TObject);
- var rec,rec1: TRect;
- rr:CvRect;
- red: CvScalar;
- yellow: CvScalar;
- count:integer;
- area,x,y:integer;
- ptr:pbyte;
- r,g,b:integer;
- OCVfont: CVFont;
- begin
- r:=StrToInt(Edit4.Text);
- g:=StrToInt(Edit5.Text);
- b:=StrToInt(Edit6.Text);
- edit3.Text:='';
- count:=0;
- area:=0;
- //1.读取和显示图像
- frame := cvQueryFrame( capture );
- if not(assigned(frame) ) then
- exit;
- IF (stor=NIL) then
- begin
- g_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
- stor := cvCreateMemStorage(0);
- end
- else
- begin
- cvClearMemStorage(stor);
- end;
-
- src:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,3);
- src:=cvCloneImage(frame);
- src_back:=cvCreateImage(cvSize_(frame.Width,frame.Height),IPL_DEPTH_32F,3);
- src_back:=cvCloneImage(frame);
- cvLine(frame, cvPoint_(160,40),cvPoint_(460,40), CV_RGB(0,0,0), 120, 8 );
- IplImage2Bitmap(frame, bmp);
- rec := Image1.canvas.ClipRect;
- Image1.canvas.StretchDraw(rec , bmp);
- cvThreshold( frame, frame ,TrackBar1.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
-
- cvDilate( frame, frame, 0, 4);
- cvSmooth(frame,frame,CV_MEDIAN,9,9);
-
- IplImage2Bitmap(frame, bmp);
- rec := Image2.canvas.ClipRect;
- Image2.canvas.StretchDraw(rec , bmp);
- cvCvtColor(frame,g_Gray,CV_BGR2GRAY); //CV_BGR2HSV
- g_Gray.Origin:=1;
-
- IplImage2Bitmap(g_Gray, bmp);
- rec := Image3.canvas.ClipRect;
- Image3.canvas.StretchDraw(rec , bmp);
- cvThreshold( g_Gray, g_Gray ,TrackBar2.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
- cvErode( g_Gray, g_Gray, 0, 2);
- IplImage2Bitmap(g_Gray, bmp);
- rec := Image4.canvas.ClipRect;
- Image4.canvas.StretchDraw(rec , bmp);
- cont := cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), stor);
- Number_Object := cvFindContours( g_Gray, stor, @cont, sizeof(CvContour),
- CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint_(0,0) ); //找到所有轮廓
- label1.Caption:= IntToStr(Number_Object);
- red := CV_RGB(255, 0, 0);
- // cvDrawContours( src, cont,red,red ,CONTOUR_MAX_LEVEL, LINE_THICKNESS,LINE_TYPE,CvPoint_(0, 0));
- cvInitFont(@OCVfont, CV_FONT_VECTOR0, 0.5, 0.5, 0, 1,16);
- while cont <> Nil do begin
- rr:=pCvContour(cont).Rect;
- cvRectangle(src, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(0,255,0),1,8,0);
-
- area:=cont.total;// cvContourArea(cont,CV_WHOLE_SEQ ) ;
- edit3.Text:=edit3.Text+':'+intToStr(area);
- count:=count+1;
- cont := cont.h_next;
- if cont=nil then cvInitFont(@OCVfont, CV_FONT_VECTOR0, 0.5, 0.5, 0, 2,16);
- cvPutText(src,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+20), @OCVfont,CV_RGB(0,0,225));
- if (area<30) or (area>75) then
- begin
- showmessage('图像面积有不合法的');
- exit;
- end;
- end;
-
- // cvInitFont(@Cfont,CV_FONT_HERSHEY_SCRIPT_SIMPLEX ,1.0,1.0,0.0, 1, 16); //CV_FONT_HERSHEY_SCRIPT_SIMPLEX
- // cvPutText(frame,Pchar('easy'),cvPoint_(400,450), @Cfont,CV_RGB(0,255,0));
- IplImage2Bitmap(src, bmp);
- rec := Image1.canvas.ClipRect;
- Image1.canvas.StretchDraw(rec , bmp);
- //image1.Canvas.Rectangle
-
- end;
-
-
-
- procedure TForm1.Button1Click(Sender: TObject);
- var rec,rec1: TRect;
- rr:CvRect;
- red: CvScalar;
- yellow: CvScalar;
- count:integer;
- area,x,y:integer;
- ptr:pbyte;
- r,g,b:integer;
- OCVfont: CVFont;
- begin
- r:=StrToInt(Edit4.Text);
- g:=StrToInt(Edit5.Text);
- b:=StrToInt(Edit6.Text);
- edit3.Text:='';
- count:=0;
- area:=0;
- //1.读取和显示图像
- frame1 := cvQueryFrame( capture );
- if not(assigned(frame1) ) then exit;
- src:=cvCreateImage(cvSize_(frame1.Width*2,frame1.Height*2),8,3);
- cvResize(frame1,src,CV_INTER_lINEAR);
- src.Origin:=1;
- frame:=cvCloneImage(frame1);
- g_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
- t_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
- G_Frame:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
- HSVframe:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,3);
- IF (stor=NIL) then
- begin
- stor := cvCreateMemStorage(0);
- end
- else
- begin
- cvClearMemStorage(stor);
- end;
- src_back:=cvCreateImage(cvSize_(frame.Width,frame.Height),IPL_DEPTH_32F,3);
- src_back:=cvCloneImage(frame);
- cvLine(frame, cvPoint_(160,40),cvPoint_(460,40), CV_RGB(0,0,0), 120, 8 );
- {
- cvFloodFill( frame, seed, brightness, cvRealScalar(lo),
- cvRealScalar(up), &comp, flags, is_mask ? mask : NULL );
- }
- cvThreshold( frame, frame ,TrackBar1.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
- // cvSmooth(frame,frame,cv_Gaussian,9,9);
- cvDilate( frame, frame, 0, 4);
- cvErode( frame, frame, 0, 2);
- cvDilate( frame, frame, 0, 3);
- cvErode( frame, frame, 0, 2);
- cvSmooth(frame,frame,CV_MEDIAN,9,9);
-
- IplImage2Bitmap(frame, bmp);
- rec := Image2.canvas.ClipRect;
- Image2.canvas.StretchDraw(rec , bmp);
- cvCvtColor(frame,g_Gray,CV_BGR2GRAY); //CV_BGR2HSV
- g_Gray.Origin:=1;
- // cvLaplace(g_Gray,t_Gray,1);
- cvEqualizeHist(g_Gray,t_Gray);
- t_Gray.Origin:=1;
-
-
- IplImage2Bitmap(t_Gray, bmp);
- rec := Image3.canvas.ClipRect;
- Image3.canvas.StretchDraw(rec , bmp);
- cvSmooth(t_Gray,t_Gray,cv_Gaussian,9,9);
- cvThreshold( t_Gray, t_Gray ,TrackBar2.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
- cvErode( t_Gray, t_Gray, 0, 2);
- IplImage2Bitmap(t_Gray, bmp);
- rec := Image4.canvas.ClipRect;
- Image4.canvas.StretchDraw(rec , bmp);
- cont := cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), stor);
- Number_Object := cvFindContours( t_Gray, stor, @cont, sizeof(CvContour),
- CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint_(0,0) ); //找到所有轮廓
- label1.Caption:= IntToStr(Number_Object);
- red := CV_RGB(255, 0, 0);
- // cvDrawContours( src, cont,red,red ,CONTOUR_MAX_LEVEL, LINE_THICKNESS,LINE_TYPE,CvPoint_(0, 0));
- cvInitFont(@OCVfont, CV_FONT_VECTOR0, 1.0, 1.0, 0, 1,16);
- while cont <> Nil do begin
- rr:=pCvContour(cont).Rect;
- area:=cont.total;
- if (area<30) or (area>75) then
- begin
- cvRectangle(src_back, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(255,0,0),2,8,0);
- edit7.Text:=Edit7.Text+':'+IntToStr(area);
- //showmessage('图像面积有不合法的');
- end;// else
- // cvRectangle(src_back, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(0,255,0),2,8,0);
- // cvContourArea(cont,CV_WHOLE_SEQ ) ;
- edit3.Text:=edit3.Text+':'+intToStr(area);
- count:=count+1;
- cont := cont.h_next;
- if cont=nil then
- begin
- cvInitFont(@OCVfont, CV_FONT_VECTOR0, 1.0, 1.0, 0, 2,16);
- cvPutText(src_back,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+15), @OCVfont,CV_RGB(255,0,0));
- end else cvPutText(src_back,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+15), @OCVfont,CV_RGB(255,255,225));
- end;
- IplImage2Bitmap(src_back, bmp);
- rec := Image1.canvas.ClipRect;
- Image1.canvas.StretchDraw(rec , bmp);
- //frame1 src frame g_Gray src_back
- //cvReleaseImage(g_Gray);
- //cvReleaseCapture(@capture);
- cvReleaseImage(src);
- cvReleaseImage(frame);
- cvReleaseImage(src_back);
- cvReleaseImage(g_Gray);
- cvReleaseImage(t_Gray);
- //image1.Canvas.Rectangle g_Gray
- end;
-
-
- end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,OpenCV,IPL,cvCAm, StdCtrls, ExtCtrls, ComCtrls;
const
THRESHOLD = 10;
THRESHOLD_MAX_VALUE = 255;
CONTOUR_MAX_LEVEL = 1;
LINE_THICKNESS = 2;
LINE_TYPE = 8;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Memo1: TMemo;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Panel1: TPanel;
Image1: TImage;
Panel2: TPanel;
Image2: TImage;
Panel3: TPanel;
Image3: TImage;
Panel4: TPanel;
Image4: TImage;
TrackBar1: TTrackBar;
Edit1: TEdit;
TrackBar2: TTrackBar;
Edit2: TEdit;
Edit3: TEdit;
Button5: TButton;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Button6: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
src : pIplImage = 0; //定义源图像指针
tmp : pIplImage = 0; //定义临时图像指针
src_back: pIplImage = 0; //定义源图像背景指针
dst_gray: pIplImage = 0; //定义源文件去掉背景后的目标灰度图像指针
dst_bw : pIplImage = 0; //定义源文件去掉背景后的目标二值图像指针
dst_contours : pIplImage = 0; //定义轮廓图像指针
element : pIplConvKernel = 0; //定义形态学结构指针
Number_Object :integer=0; //定义目标对象数量
contour_area_tmp :integer = 0; //定义目标对象面积临时寄存器
contour_area_sum :integer= 0; //定义目标所有对象面积的和
contour_area_ave :integer= 0; //定义目标对象面积平均值
contour_area_max :integer= 0; //定义目标对象面积最大值
stor: pCvMemStorage = nil;
cont: pCvSeq = 0;
cont1: pCvSeq = 0;
Cfont: CvFont ;
C1font: pCvFont ;
a_contour: pCvSeq = 0;
capture: PCvCapture;
frame: PIplImage=0;
frame1: PIplImage=0;
MFrame:PIplImage=0;
image: PIplImage=0;
g_Gray: PIplImage=0;
t_Gray: PIplImage=0;
bmp: TBitmap;
sz:PCvSize;
track_box: CvBox2D;
implementation
{$R *.dfm}
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
edit1.Text:=IntToStr(TrackBar1.Position);
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
begin
edit2.Text:=IntToStr(TrackBar2.Position);
end;
procedure TForm1.Button5Click(Sender: TObject);
var rec,rec1: TRect;
rr:CvRect;
red: CvScalar;
yellow: CvScalar;
count:integer;
area,x,y:integer;
ptr:pbyte;
r,g,b:integer;
OCVfont: CVFont;
begin
r:=StrToInt(Edit4.Text);
g:=StrToInt(Edit5.Text);
b:=StrToInt(Edit6.Text);
edit3.Text:='';
count:=0;
area:=0;
//1.读取和显示图像
frame := cvQueryFrame( capture );
if not(assigned(frame) ) then
exit;
IF (stor=NIL) then
begin
g_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
stor := cvCreateMemStorage(0);
end
else
begin
cvClearMemStorage(stor);
end;
src:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,3);
src:=cvCloneImage(frame);
src_back:=cvCreateImage(cvSize_(frame.Width,frame.Height),IPL_DEPTH_32F,3);
src_back:=cvCloneImage(frame);
cvLine(frame, cvPoint_(160,40),cvPoint_(460,40), CV_RGB(0,0,0), 120, 8 );
IplImage2Bitmap(frame, bmp);
rec := Image1.canvas.ClipRect;
Image1.canvas.StretchDraw(rec , bmp);
cvThreshold( frame, frame ,TrackBar1.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
cvDilate( frame, frame, 0, 4);
cvSmooth(frame,frame,CV_MEDIAN,9,9);
IplImage2Bitmap(frame, bmp);
rec := Image2.canvas.ClipRect;
Image2.canvas.StretchDraw(rec , bmp);
cvCvtColor(frame,g_Gray,CV_BGR2GRAY); //CV_BGR2HSV
g_Gray.Origin:=1;
IplImage2Bitmap(g_Gray, bmp);
rec := Image3.canvas.ClipRect;
Image3.canvas.StretchDraw(rec , bmp);
cvThreshold( g_Gray, g_Gray ,TrackBar2.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
cvErode( g_Gray, g_Gray, 0, 2);
IplImage2Bitmap(g_Gray, bmp);
rec := Image4.canvas.ClipRect;
Image4.canvas.StretchDraw(rec , bmp);
cont := cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), stor);
Number_Object := cvFindContours( g_Gray, stor, @cont, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint_(0,0) ); //找到所有轮廓
label1.Caption:= IntToStr(Number_Object);
red := CV_RGB(255, 0, 0);
// cvDrawContours( src, cont,red,red ,CONTOUR_MAX_LEVEL, LINE_THICKNESS,LINE_TYPE,CvPoint_(0, 0));
cvInitFont(@OCVfont, CV_FONT_VECTOR0, 0.5, 0.5, 0, 1,16);
while cont <> Nil do begin
rr:=pCvContour(cont).Rect;
cvRectangle(src, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(0,255,0),1,8,0);
area:=cont.total;// cvContourArea(cont,CV_WHOLE_SEQ ) ;
edit3.Text:=edit3.Text+':'+intToStr(area);
count:=count+1;
cont := cont.h_next;
if cont=nil then cvInitFont(@OCVfont, CV_FONT_VECTOR0, 0.5, 0.5, 0, 2,16);
cvPutText(src,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+20), @OCVfont,CV_RGB(0,0,225));
if (area<30) or (area>75) then
begin
showmessage('图像面积有不合法的');
exit;
end;
end;
// cvInitFont(@Cfont,CV_FONT_HERSHEY_SCRIPT_SIMPLEX ,1.0,1.0,0.0, 1, 16); //CV_FONT_HERSHEY_SCRIPT_SIMPLEX
// cvPutText(frame,Pchar('easy'),cvPoint_(400,450), @Cfont,CV_RGB(0,255,0));
IplImage2Bitmap(src, bmp);
rec := Image1.canvas.ClipRect;
Image1.canvas.StretchDraw(rec , bmp);
//image1.Canvas.Rectangle
end;
procedure TForm1.Button1Click(Sender: TObject);
var rec,rec1: TRect;
rr:CvRect;
red: CvScalar;
yellow: CvScalar;
count:integer;
area,x,y:integer;
ptr:pbyte;
r,g,b:integer;
OCVfont: CVFont;
begin
r:=StrToInt(Edit4.Text);
g:=StrToInt(Edit5.Text);
b:=StrToInt(Edit6.Text);
edit3.Text:='';
count:=0;
area:=0;
//1.读取和显示图像
frame1 := cvQueryFrame( capture );
if not(assigned(frame1) ) then exit;
src:=cvCreateImage(cvSize_(frame1.Width*2,frame1.Height*2),8,3);
cvResize(frame1,src,CV_INTER_lINEAR);
src.Origin:=1;
frame:=cvCloneImage(frame1);
g_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
t_Gray:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
G_Frame:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,1);
HSVframe:=cvCreateImage(cvSize_(frame.Width,frame.Height),8,3);
IF (stor=NIL) then
begin
stor := cvCreateMemStorage(0);
end
else
begin
cvClearMemStorage(stor);
end;
src_back:=cvCreateImage(cvSize_(frame.Width,frame.Height),IPL_DEPTH_32F,3);
src_back:=cvCloneImage(frame);
cvLine(frame, cvPoint_(160,40),cvPoint_(460,40), CV_RGB(0,0,0), 120, 8 );
{
cvFloodFill( frame, seed, brightness, cvRealScalar(lo),
cvRealScalar(up), &comp, flags, is_mask ? mask : NULL );
}
cvThreshold( frame, frame ,TrackBar1.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
// cvSmooth(frame,frame,cv_Gaussian,9,9);
cvDilate( frame, frame, 0, 4);
cvErode( frame, frame, 0, 2);
cvDilate( frame, frame, 0, 3);
cvErode( frame, frame, 0, 2);
cvSmooth(frame,frame,CV_MEDIAN,9,9);
IplImage2Bitmap(frame, bmp);
rec := Image2.canvas.ClipRect;
Image2.canvas.StretchDraw(rec , bmp);
cvCvtColor(frame,g_Gray,CV_BGR2GRAY); //CV_BGR2HSV
g_Gray.Origin:=1;
// cvLaplace(g_Gray,t_Gray,1);
cvEqualizeHist(g_Gray,t_Gray);
t_Gray.Origin:=1;
IplImage2Bitmap(t_Gray, bmp);
rec := Image3.canvas.ClipRect;
Image3.canvas.StretchDraw(rec , bmp);
cvSmooth(t_Gray,t_Gray,cv_Gaussian,9,9);
cvThreshold( t_Gray, t_Gray ,TrackBar2.Position, 255, CV_THRESH_BINARY ); //取阀值为50把图像转为二值图像
cvErode( t_Gray, t_Gray, 0, 2);
IplImage2Bitmap(t_Gray, bmp);
rec := Image4.canvas.ClipRect;
Image4.canvas.StretchDraw(rec , bmp);
cont := cvCreateSeq(0, sizeof(CvSeq), sizeof(CvPoint), stor);
Number_Object := cvFindContours( t_Gray, stor, @cont, sizeof(CvContour),
CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE, cvPoint_(0,0) ); //找到所有轮廓
label1.Caption:= IntToStr(Number_Object);
red := CV_RGB(255, 0, 0);
// cvDrawContours( src, cont,red,red ,CONTOUR_MAX_LEVEL, LINE_THICKNESS,LINE_TYPE,CvPoint_(0, 0));
cvInitFont(@OCVfont, CV_FONT_VECTOR0, 1.0, 1.0, 0, 1,16);
while cont <> Nil do begin
rr:=pCvContour(cont).Rect;
area:=cont.total;
if (area<30) or (area>75) then
begin
cvRectangle(src_back, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(255,0,0),2,8,0);
edit7.Text:=Edit7.Text+':'+IntToStr(area);
//showmessage('图像面积有不合法的');
end;// else
// cvRectangle(src_back, cvPoint_(rr.x,rr.y), cvPoint_(rr.x +rr.width,rr.y+rr.height),CV_RGB(0,255,0),2,8,0);
// cvContourArea(cont,CV_WHOLE_SEQ ) ;
edit3.Text:=edit3.Text+':'+intToStr(area);
count:=count+1;
cont := cont.h_next;
if cont=nil then
begin
cvInitFont(@OCVfont, CV_FONT_VECTOR0, 1.0, 1.0, 0, 2,16);
cvPutText(src_back,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+15), @OCVfont,CV_RGB(255,0,0));
end else cvPutText(src_back,Pchar(IntToStr(count)),cvPoint_(rr.x+15,rr.y+15), @OCVfont,CV_RGB(255,255,225));
end;
IplImage2Bitmap(src_back, bmp);
rec := Image1.canvas.ClipRect;
Image1.canvas.StretchDraw(rec , bmp);
//frame1 src frame g_Gray src_back
//cvReleaseImage(g_Gray);
//cvReleaseCapture(@capture);
cvReleaseImage(src);
cvReleaseImage(frame);
cvReleaseImage(src_back);
cvReleaseImage(g_Gray);
cvReleaseImage(t_Gray);
//image1.Canvas.Rectangle g_Gray
end;
end.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。