2016-08-04 10 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を取り、それを微調整することができますので、あなたが必要なものも大きいと効果を液化するために似ているようですradius、与えられた半径の円形ディスクに長方形のイメージをカプセル化したいですか?私は正しい? – ZdaR

+0

はい、まさに私が必要なものです –

答えて

関連する問題