📄 houghlines.dpr
字号:
program HoughLines;
uses
Forms,
cvCAm in '..\OpenCV\cvCAm.pas',
highGui in '..\OpenCV\highGui.pas',
IPL in '..\OpenCV\Ipl.pas',
OpenCV in '..\OpenCV\OpenCV.pas';
{$R *.res}
const w = 500 ;
var imgA,imgB,img,grayimg ,edgeimg: pIplImage;
box : CvBox2D ;
storage : pcvMemStorage;
contours,Approx_contours : pCvSeq;
res : integer;
cS : cvSize ;
i,j : integer;
levels : integer = 3;
rect :cvRect;
pt : array [0..3] of CvPoint2D32f;
lines : pCvSeq;
p1,p2 : cvPoint;
procedure drawLines();
var line : PFloat;
rho,theta : float;
pt1,pt2 : CvPoint;
a,b :double;
begin
for i:=0 to lines.total-1 do
begin
line := pFloat(cvGetSeqElem( lines, i));
rho := line^; inc(line);
theta := line^;
a := cos(theta) ; b := sin(theta);
if ( abs(a)<0.001 ) then
begin
if (pt2.x = cvRound(rho)) then pt1.x := 1
else pt1.x := 0;
pt1.y := 0;
pt2.y := imgA.Height;
end
else if( abs(b) < 0.001 ) then
begin
if (pt2.y = cvRound(rho)) then pt1.y := 1
else pt1.y := 0;
pt1.x := 0;
pt2.x := imgA.width;
end
else begin
pt1.x := 0;
pt1.y := cvRound(rho/b);
pt2.x := cvRound(rho/a);
pt2.y := 0;
end;
cvLine( imgA, pt1, pt2, CV_RGB(255,0,0), 1, 8);
end;
end;
var dx,dy : integer;
white , black : CvScalar;
angle : double;
edgeX : pIplImage;
aLine : pCvPoint;
begin
//--- Cargo una imagen
imgA := cvLoadImage( 'image_sample4.jpg', -1);
edgeX := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1 );
storage := cvCreateMemStorage(0);
grayimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
cvZero( grayimg );
edgeimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
cvZero( edgeimg );
// cvSobel( imgA, edgeX, 1, 0, 3);
//cvLaplace( imgA, edgeX, 3);
cvCvtColor( imgA, grayimg, CV_BGR2GRAY);
cvCanny( grayimg, edgeimg, 50, 200, 3 );
cvCvtColor( edgeimg, imgA, CV_GRAY2BGR);
//--- Prueba 1
// lines := cvHoughLines2( edgeimg, storage, CV_HOUGH_STANDARD, 1, PI/180, 70, 0, 0);
// drawLines();
//--- Prueba 2
lines := cvHoughLines2( edgeimg, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 30, 5, 5);
cvCvtColor( edgeimg, imgA, CV_GRAY2BGR);
for i:=0 to lines.total-1 do
begin
aline := PCvPoint(cvGetSeqElem( lines, i));
p1 := pcvPoint(aLine)^; inc( aLine);
p2 := pcvPoint(aLine)^;
cvLine( imgA,p1,p2, CV_RGB(255,0,0), 1, 8);
END;
cvNamedWindow( 'image', 1 );
cvShowImage( 'image', imgA );
cvWaitKey(0);
{ grayimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
cvZero( grayimg );
edgeimg := cvCreateImage( cvSize_(imgA.Width,imgA.Height), IPL_DEPTH_8U, 1);
cvZero( grayimg );
storage := cvCreateMemStorage( 0);
IplImage *edgeX = cvCreateImage( cvGetSize(imgA), IPL_DEPTH_16S, 1 );
// cvCvtColor( imgA, grayimg, CV_BGR2GRAY);
//cvCanny( grayimg, edgeimg, 50, 200, 3 );
cvSobel( imgA, edgeimg, 1, 0, 3);
cvCvtColor( edgeimg, imgA, CV_GRAY2BGR);
cvNamedWindow( 'image', 1 );
cvShowImage( 'image', grayimg );
cvWaitKey(0); }
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -