2016-08-04 4 views
2

아이디어는 직사각형 이미지를 찍고 그 안에서 원을 만드는 것입니다. 원본 이미지에서 픽셀을 취해 줄별로 정렬하여 정렬하는 간단한 알고리즘을 생각해 냈습니다. 그러나 문제는 그 결과가 너무 왜곡되어 있다는 것입니다. 너무 많은 데이터를 잃지 않고 그렇게 할 수있는 알고리즘이 있습니까? 그 결과는 다음과 같다주어진 이미지에서 OpenCV로 반지 그리기

//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(); 

:

여기 코드의 당신은 시도 할 수 result

+0

그래서 당신이 필요보다 큰 용량 효과를 액화 비슷한 것 같다 당신이 source code for them from GitHub repo 걸릴 수 있으며 (이 들릴 수만큼 무서운되지 않음)을 조정할 반경, 주어진 반경의 원형 디스크에 직사각형 이미지를 캡슐화하고 싶습니까? 내가 맞습니까? – ZdaR

+0

네, 정확히 내가 필요한 것 –

답변