#include <stdio.h>
#include <cv.h>
#include <highgui.h>
{
IplImage *img=cvLoadImage("/home/eve/Download/homework 2/chess.jpg");
IplImage* src = cvLoadImage("/home/eve/Download/homework 2/chess.jpg", 0 );
IplImage* dst= cvCreateImage(cvGetSize(src),IPL_DEPTH_8U, 1 );
// IplImage *dst_color=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U, 3 );
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* lines = 0;
CvRect roi=cvRect(0,200,1000,500);
int i;
cvCanny(src, dst, 150, 300, 3 ); //canny边缘检测
// cvCvtColor(dst,dst_color,CV_GRAY2BGR);
cvSetImageROI(dst,roi);
// cvSetImageROI(dst_color,roi);
cvSetImageROI(img,roi);
lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180,90,10,90 ); //probablistic
for( i = 0; i < lines->total; i++ )
{
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
// cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
cvLine(img, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 ); //画在原图
}
cvResetImageROI(img);
//********************************************** line detected
int j;
// IplImage *img=cvLoadImage("/home/eve/Download/homework 2/chess.jpg");
IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); //输入 8-比特、单通道灰度图像.
IplImage *edges=cvCreateImage(cvGetSize(img), 8, 1);
CvMemStorage* storage2 = cvCreateMemStorage(0);
cvCvtColor( img, gray, CV_BGR2GRAY );
IplImage *dst2=cvCreateImage( cvGetSize(img), 8, 1 );
// IplImage* color_dst=cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
cvCanny(gray,edges,150,300,3);
// cvCvtColor(edges, color_dst, CV_GRAY2BGR );
// cvShowImage("color_dst",color_dst);
cvThreshold(gray,dst2,120,255,CV_THRESH_BINARY);
CvSeq* circles = cvHoughCircles(dst2, storage2, CV_HOUGH_GRADIENT,2,
30,300,120,10,65);
for( j = 0; j < circles->total; j++ )
{
float* p = (float*)cvGetSeqElem( circles, j );
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 0.5, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(0,0,255), 3, 8, 0 );
//cvCircle(CvArr* img, CvPoint center, int radius, CvScalar color, int thickness=1, int lineType=8, int shift=0)
}
// cvShowImage("circles",img);
cvShowImage("hough",img);
cvWaitKey(0);
cvSaveImage("hough.jpg",img) ;
return 0;
}
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
int main()
{
IplImage *img=cvLoadImage("/home/eve/Download/homework 2/figures2.jpg");
IplImage* src = cvLoadImage("/home/eve/Download/homework 2/figures2.jpg", 0 );
IplImage* dst= cvCreateImage(cvGetSize(src),IPL_DEPTH_8U, 1 );
// IplImage *dst_color=cvCreateImage(cvGetSize(src),IPL_DEPTH_8U, 3 );
CvMemStorage* storage = cvCreateMemStorage(0);
CvSeq* lines = 0;
int i;
cvCanny(src, dst, 50, 150, 3 ); //canny边缘检测
// cvShowImage("dst",dst);
// cvCvtColor(dst,dst_color,CV_GRAY2BGR);
// lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180,90,10,90 ); //probablistic
lines = cvHoughLines2( dst, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180,50,60,50 );
for( i = 0; i < lines->total; i++ )
{
CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);
// cvLine( color_dst, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 );
cvLine(img, line[0], line[1], CV_RGB(255,0,0), 3, CV_AA, 0 ); //画在原图
}
//********************************************** line detected
int j;
// IplImage *img=cvLoadImage("/home/eve/Download/homework 2/chess.jpg");
IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); //输入 8-比特、单通道灰度图像.
IplImage *edges=cvCreateImage(cvGetSize(img), 8, 1);
CvMemStorage* storage2 = cvCreateMemStorage(0);
cvCvtColor( img, gray, CV_BGR2GRAY );
// cvShowImage("gray",gray);
IplImage *dst2=cvCreateImage( cvGetSize(img), 8, 1 );
// IplImage* color_dst=cvCreateImage( cvGetSize(img), IPL_DEPTH_8U, 3 );
cvCanny(gray,edges,75,150,3);
// cvShowImage("edges",edges);
// cvCvtColor(edges, color_dst, CV_GRAY2BGR );
// cvShowImage("color_dst",color_dst);
cvThreshold(edges,dst2,120,255,CV_THRESH_BINARY);
//cvShowImage("dst2",dst2);
//800*600;
// CvSeq* circles = cvHoughCircles(dst2, storage2, CV_HOUGH_GRADIENT,1,
// 350,200,37);
CvSeq* circles = cvHoughCircles(dst2, storage2, CV_HOUGH_GRADIENT,2,
60,200,120,10,200);
for( j = 0; j < circles->total; j++ )
{
float* p = (float*)cvGetSeqElem( circles, j );
// cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), 0.5, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle( img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(0,0,255), 3, 8, 0 );
}
// cvShowImage("circles",img);
cvShowImage("hough",img);
cvWaitKey(0);
return 0;
}