编译运行

编译文件

project(imageBasics)

set(CMAKE_CXX_FLAGS "-std=c++11")
# 链接OpenCV库
target_link_libraries(imageBasics ${OpenCV_LIBS}) add_executable(undistortImage undistortImage.cpp) # 链接OpenCV库 target_link_libraries(undistortImage${OpenCV_LIBS})



源码解读

#include <opencv2/opencv.hpp>
#include <string>

using namespace std;

string image_file = "/home/q/projects/slambook2/ch5/imageBasics/distorted.png";   // 请确保路径正确

int main(int argc, char **argv) {

// 本程序实现去畸变部分的代码。尽管我们可以调用OpenCV的去畸变，但自己实现一遍有助于理解。
// 畸变参数
double k1 = -0.28340811, k2 = 0.07395907, p1 = 0.00019359, p2 = 1.76187114e-05;
// 内参
double fx = 458.654, fy = 457.296, cx = 367.215, cy = 248.375;

cv::Mat image = cv::imread(image_file, 0);   // 图像是灰度图，CV_8UC1
int rows = image.rows, cols = image.cols;
cv::Mat image_undistort = cv::Mat(rows, cols, CV_8UC1);   // 去畸变以后的图

// 计算去畸变后图像的内容
for (int v = 0; v < rows; v++) {
for (int u = 0; u < cols; u++) {
// 按照公式，计算点(u,v)对应到畸变图像中的坐标(u_distorted, v_distorted)
double x = (u - cx) / fx;
double y = (v - cy) / fy;
double r = sqrt(x * x + y * y);
double x_distorted = x * (1 + k1 * r * r + k2 * r * r * r * r) + 2 * p1 * x * y + p2 * (r * r + 2 * x * x);
double y_distorted = y * (1 + k1 * r * r + k2 * r * r * r * r) + p1 * (r * r + 2 * y * y) + 2 * p2 * x * y;
double u_distorted = fx * x_distorted + cx;
double v_distorted = fy * y_distorted + cy;

// 赋值 (最近邻插值)
if (u_distorted >= 0 && v_distorted >= 0 && u_distorted < cols && v_distorted < rows) {
image_undistort.at<uchar>(v, u) = image.at<uchar>((int) v_distorted, (int) u_distorted);
} else {
image_undistort.at<uchar>(v, u) = 0;
}
}
}

// 画图去畸变后图像
cv::imshow("distorted", image);
cv::imshow("undistorted", image_undistort);
cv::waitKey();
return 0;
}



04-11 132

06-21 7576

05-31 308

10-04 203

10-10 606

02-01 95

11-17 205

11-22 262

04-27 135

11-07 176

05-22 73

04-14 58万+

03-13 14万+

03-04 13万+

03-05 6005

03-08 4万+

03-08 7万+

03-10 12万+

03-12 11万+

03-13 11万+

03-14 1万+

03-18 5596

03-18 9085

03-19 3万+

03-19 8万+

03-20 7922

03-24 3万+

03-25 3万+

05-08 5万+

03-25 9万+

03-29 21万+

03-29 1万+

03-29 10万+

03-30 16万+

05-28 5438

05-28 1万+

04-02 4万+

04-03 3248

04-06 7万+

04-07 5万+

04-09 8万+

04-09 2万+

05-17 7787

04-10 2635

04-11 3万+

04-15 6万+

04-18 4万+

04-20 4万+

04-24 3万+

04-29 6026

04-29 6675

04-30 4707

04-30 9654

04-30 9143

05-16 5万+

05-08 4万+

05-11 3万+

05-12 1万+

05-13 546

05-14 5935

05-14 1672

05-16 1万+

05-20 662

05-18 7920

05-27 835

05-18 3165

05-19 1万+

05-21 6216

05-21 6213

05-25 4490

05-22 239

05-23 1万+

05-23 6160

05-24 1631

05-23 9305

05-23 1513

05-24 6164

05-24 7712

java代码30行实现用我爱你重绘女朋友美照（我对你的爱，在每一个字里行间）

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客