Kanatlı kenar algoritmasını kullandığımda, beklendiği gibi kalın renkli çizginin karşısındaki 2 kenarı üretir, ancak çizgimi ve eğri algılamayı yapmak için yalnızca bir kenarın görüntülenmesini istiyorum algoritma çok daha az karmaşık, bunun nasıl gerçekleşebileceğine dair herhangi bir fikir var mı?Canny kenar algoritmasında yalnızca bir kenara mı ihtiyacınız var?
bool CannyEdgeDetection(DataStructure& col)
{
Mat src, src_gray;
Mat dst, detected_edges, fin;
int WhiteCount = 0, BCount = 0;
char szFil1[32] = "ocv.bmp";
char szFil2[32] = "dst.bmp";
src = imread(szFil1);
dst = imread(szFil1);
blur(src_gray, detected_edges, Size(3,3));
Canny(src, dst, 100, 200, 3);
imwrite(szFil2, dst);
IplImage* img = cvLoadImage(szFil2);
int height = img->height;
int width = img->width;
int step = img->widthStep;
int channels = img->nChannels;
uchar * datau = (uchar *)img->imageData;
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
for(int k=0;k<channels;k++){
datau[i*step+j*channels+k] = 255 - datau[i*step+j*channels+k];
if (datau[i*step+j*channels+k]==0){
WhiteCount++;
col.pixel_col [i][j] = 2;
}
else{BCount++;
col.pixel_col[i][j] = 0;
}
}
}
}
cvSaveImage("img.bmp" ,img);
return 0;
}
Bu orijinal görüntü ama benzer değil: İşte
koduduri okuyabilecek olduğu ortaya yorum yaparım Hangi parçası beyaz arka planda siyah görüntüler? veya herhangi bir renkli görüntü mü?
bool done;
do
{
cv::morphologyEx(img, temp, cv::MORPH_OPEN, element);
cv::bitwise_not(temp, temp);
cv::bitwise_and(img, temp, temp);
cv::bitwise_or(skel, temp, skel);
cv::erode(img, img, element);
double max;
cv::minMaxLoc(img, 0, &max);
done = (max == 0);
} while (!done);
o ana kadar denedim ne olacak? Bir kod gönderebilir misin? Ya da en azından giriş görüntüsü? – dom
Orijinal resminize bir bağlantı yükleyebilir misiniz? Başka insanlar daha iyi yöntemler sağlayabilir. –
Bunu yapmanın aptalca basit yöntemi, görüntüyü yeniden boyutlandırmaktır - kenarların 1-2 piksel olacağı kadar küçük olmasını sağlayın. Hem 1 piksel dalga kenarları hem de anında performans artışı olacak. – Sam