Resimdeki köşeleri bulmaya çalışıyorum, konturlara ihtiyacım yok, sadece 4 köşeyi. 4 köşeyi kullanarak perspektifi değiştireceğim.OpenCv kullanarak bir görüntüde köşeler nasıl bulunur
Opencv kullanıyorum, ancak köşeleri bulmak için hangi adımları kullanacağımı bilmem gerekiyor.
Resimlerim böyle olacak:
EDITED (kırmızı noktalar olmadan, ben sonra noktaları boyamak olacaktır): önerilen adımlardan sonra
, kodu writed: (Not: -herhalde- saf OpenCv kullanmam, javaCV kullanıyorum, ama mantık aynıdır).
// Load two images and allocate other structures (I´m using other image)
IplImage colored = cvLoadImage(
"res/scanteste.jpg",
CV_LOAD_IMAGE_UNCHANGED);
IplImage gray = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
IplImage smooth = cvCreateImage(cvGetSize(colored), IPL_DEPTH_8U, 1);
//Step 1 - Convert from RGB to grayscale (cvCvtColor)
cvCvtColor(colored, gray, CV_RGB2GRAY);
//2 Smooth (cvSmooth)
cvSmooth(gray, smooth, CV_BLUR, 9, 9, 2, 2);
//3 - cvThreshold - What values?
cvThreshold(gray,gray, 155, 255, CV_THRESH_BINARY);
//5 - Find contours (cvFindContours)
int total = 0;
CvSeq contour2 = new CvSeq(null);
CvMemStorage storage2 = cvCreateMemStorage(0);
CvMemStorage storageHull = cvCreateMemStorage(0);
total = cvFindContours(gray, storage2, contour2, Loader.sizeof(CvContour.class), CV_RETR_CCOMP, CV_CHAIN_APPROX_NONE);
if(total > 1){
while (contour2 != null && !contour2.isNull()) {
if (contour2.elem_size() > 0) {
//6 - Approximate contours with linear features (cvApproxPoly)
CvSeq points = cvApproxPoly(contour2,Loader.sizeof(CvContour.class), storage2, CV_POLY_APPROX_DP,cvContourPerimeter(contour2)*0.005, 0);
cvDrawContours(gray, points,CvScalar.BLUE, CvScalar.BLUE, -1, 1, CV_AA);
}
contour2 = contour2.h_next();
}
}
//4 - Detect edges (cvCanny) -What values?
int N = 7;
int aperature_size = N;
double lowThresh = 20;
double highThresh = 40;
cvCanny(gray, gray, lowThresh*N*N, highThresh*N*N, aperature_size);
Yani, Cornes bulmak istiyorum, ama köşeler cvCornerHarris ve diğerleri gibi işlev nasıl kullanılacağını bilmiyorum.
OpenCV yönettiği "köşe" senin sandığın şekilde köşeleri bulmuyorum fonksiyonları - kabaca konuşmak gerekirse, önemli yatay ve dikey değişime sahip alanları bulurlar. OpenCV'deki köşe işlevlerinin amacı, görsel izleme için yararlı olacak olan görüntünün ayırt edici kısımlarını bulmaktır; bu, genellikle köşe olarak düşündüğümüz şeyler değildir. –
http://stackoverflow.com/a/14368605/1832154 adresindeki tam kod (resminiz yeterince küçük olduğundan, yeniden boyutlandırma bölümü dışında) http://i.imgur.com/hMdAlHX.png – mmgp