opencv自帶糾正方法不能矯正扭曲引數s和ρ。因此自己寫**來完成糾正。包括opencv的畸變模型,和smart3d的畸變模型,其原理見影像畸變糾正詳解
remap()不懂的可以看remap詳解
mat src_cpu = imread(in_filename);
cv::mat mapx, mapy;
mapx.create(src_cpu.size(), cv_32fc1);
mapy.create(src_cpu.size(), cv_32fc1);
float u0 = src_cpu.size().width / 2 + cx;
float v0 = src_cpu.size().height / 2 + cy;
double u0 = src_cpu.size().width / 2 + cx;
double v0 = src_cpu.size().height / 2 + cy;
double k1, k2, k3, p1, p2;
// smart3d model
//k1 = distortionarr[0];
//k2 = distortionarr[1];
//k3 = distortionarr[2];
//p1 = distortionarr[3];
//p2 = distortionarr[4];
//for (int i = 0; i(j, i) = u;
// mapy.at(j, i) = v;
// }
// opencv model
k1 = distortionarr[0];
k2 = distortionarr[1];
p1 = distortionarr[2];
p2 = distortionarr[3];
k3 = distortionarr[4];
for(int i = 0;i(j, i) = u;
mapy.at(j, i) = v;
} // gpu version
cv::cuda::gpumat src(src_cpu);
cv::cuda::gpumat distortion(src.size(), src.type());
cv::mat result;
::cv::cuda::gpumat m_mapx;
::cv::cuda::gpumat m_mapy;
m_mapx = ::cv::cuda::gpumat(mapx);
m_mapy = ::cv::cuda::gpumat(mapy);
::cv::cuda::remap(src, distortion, m_mapx, m_mapy, inter_linear);
distortion.download(result);
imshow("img", src_cpu);
imshow("undistort", result);
waitkey(0);
OpenCV實現影像畸變矯正GPU
opencv實現影像矯正使用的是 initundistortrectifymap 計算畸變的對映 remap 計算對映,其詳解見 opencv函式remap詳解 注 k1,k2,p1,p2,k3的順序 只能糾正不考慮skew扭曲引數的情況。mat src cpu imread in filename...
相機畸變矯正
影象的幾何畸變是指在影象平面上影象點在幾何位置上的誤差,是因為成像系統不能使影象與實際景物在全視場範圍內嚴格滿足針孔成像模圖型使中心投影射線發生彎曲造成的,畸變主要分為徑向畸變和切向畸變 徑向畸變是指給定影象點從它的理想位置向內或向外移動,主要是由鏡頭表面部分在徑向曲率的變化存在缺陷造成的,影象點負...
畸變矯正 輕度散光可以治療 矯正嗎?
什麼是散光?散光是一種常見的眼科疾病,由於進入眼睛的光線不能均勻地聚焦在視網膜上,從而導致視力模糊。散光是由異常形狀的角膜引起的,當光線穿過角膜時,它們會彎曲 折射 並且在達到視網膜之前會導致視力模糊。這種現象被稱為 屈光不正 散光是由什麼引起的?儘管尚不清楚角膜或晶狀體形狀異常的確切原因,但遺傳似...