2016-08-04 5 views
2

Also ist die Idee, ein rechteckiges Bild zu machen und einen Kreis daraus zu machen. Ich habe einen einfachen Algorithmus entwickelt, der Pixel aus dem Quellbild aufnimmt und sie Zeile für Zeile in Zeilen umordnet, aber das Problem ist, dass das Ergebnis zu verzerrt ist. Gibt es einen Algorithmus, der dies ermöglicht, ohne so viele Daten zu verlieren?Zeichnen eines Rings in OpenCV aus gegebenem Bild

Hier ist der Code:

//reading source and destination images 
Mat src = imread("srcImg.jpg", 1); 
Mat dst = imread("dstImg.jpg", 1); 

int srcH = src.rows; int srcW = src.cols; 
int dstH = dst.rows; int dstW = src.cols; 

//convert chamber radius to pixels 
double alpha; 
int r = 250; 
double k = 210/(500 * PI); 

//take pixels from source and arrange them into circles 
for (int i = srcH-1; i > 0; i--) { 
    for (int j = 1; j <= srcW; j++) { 
     alpha = (double) (2 * PI * (r * k+i))/j; 
     int x_new = abs((int) (dstW/2 - (r * k + i) * cos(alpha)) - 200); 
     int y_new = abs((int) (dstH/2 - (3.5*(r * k + i) * sin(alpha)))+1000); 
     dst.at<uchar>(x_new, y_new) = src.at<uchar>(srcH-i, srcW-j); 
    } 
} 

//make dst image grey and show all images 
Mat dstGray; 
cvtColor(dst, dstGray, CV_RGB2GRAY); 
imshow("Source", src); 
imshow("Result", dstGray); 

waitKey(); 

Ein Ergebnis ist unten dargestellt: result

+0

Also, was Sie brauchen, scheint eine ähnliche Wirkung zu verflüssigen, mit einem größeren Radius, Sie möchten das rechteckige Bild in eine Kreisscheibe mit gegebenem Radius einkapseln? Habe ich recht ? – ZdaR

+0

Ja, genau was ich brauche –

Antwort