あなたが望むことをする例を見つけることができたのは良いことです。それらを質問に含めると便利です。それを読んだ人があなたと同じページにいることを確認できます. ここにリンクがあります。
面倒な作業をライブラリに頼らずに、自分でやりたいと思うのも良いことです。しかし、それは、そのようなソリューションを無視しなければならないという意味ではありません。理由は次のとおりです。
そのリンクで OpenCV が実際に使用されているものを見てください。で始まる関数は次のcv
とおりです。
$ grep -o "cv\\w*" barrel.cpp | sort | uniq
cv
cvCreateImage
cvGet2D
cvGetSize
cvLoadImage
cvNamedWindow
cvSaveImage
cvSet2D
cvShowImage
cvWaitKey
OpenCV APIを見ると、これらの関数はすべて、画像の作成、削除、表示、ピクセルの設定などのありふれたタスクを処理するだけです。これらのタスクはいずれもバレル歪みに固有のものではありません。バレル歪みに関する限り、そのソリューションはOpenCV 固有のものではありません。
実際、プログラムの核心は次のとおりです。
float getRadialX(float x,float y,float cx,float cy,float k){
x = (x*xscale+xshift);
y = (y*yscale+yshift);
float res = x+((x-cx)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
return res;
}
float getRadialY(float x,float y,float cx,float cy,float k){
x = (x*xscale+xshift);
y = (y*yscale+yshift);
float res = y+((y-cy)*k*((x-cx)*(x-cx)+(y-cy)*(y-cy)));
return res;
}
これは単なるラジアル変換式です。これは、理解する必要があるビットです。ご覧のとおり、そこには OpenCV 呼び出しはありません。