Tôi sử dụng OpenCV để hủy đặt lại các điểm sau khi hiệu chỉnh máy ảnh. Mã sau.Làm cách nào để hủy các điểm trong tọa độ ảnh của camera và có được tọa độ ảnh chưa phân loại tương ứng?
const int npoints = 2; // number of point specified
// Points initialization.
// Only 2 ponts in this example, in real code they are read from file.
float input_points[npoints][2] = {{0,0}, {2560, 1920}};
CvMat * src = cvCreateMat(1, npoints, CV_32FC2);
CvMat * dst = cvCreateMat(1, npoints, CV_32FC2);
// fill src matrix
float * src_ptr = (float*)src->data.ptr;
for (int pi = 0; pi < npoints; ++pi) {
for (int ci = 0; ci < 2; ++ci) {
*(src_ptr + pi * 2 + ci) = input_points[pi][ci];
}
}
cvUndistortPoints(src, dst, &camera1, &distCoeffs1);
Sau khi mã trên dst
chứa số sau:
-8.82689655e-001 -7.05507338e-001 4.16228324e-001 3.04863811e-001
đó là quá nhỏ so với con số trong src
.
Cùng lúc đó nếu tôi undistort hình ảnh qua cuộc gọi:
cvUndistort2(srcImage, dstImage, &camera1, &dist_coeffs1);
tôi nhận được hình ảnh nguyên bản tốt có nghĩa là tọa độ điểm ảnh không được sửa đổi để mạnh so với điểm riêng biệt.
Làm cách nào để có được sự phân biệt tương tự cho các điểm cụ thể như đối với hình ảnh? Cảm ơn.
bạn có chắc camera1 và camera giống nhau không? – Sam
có, giống nhau - Tôi có câu hỏi cố định. Cảm ơn bạn đã chỉ ra. Hơn nữa ban đầu tôi nhận được hành vi như vậy trong EmguCV và sau đó cố gắng tìm ra nơi hành vi như vậy được giới thiệu: trong OpenCV hoặc EmguCV chính nó. Nó xuất hiện trong OpenCV. – sergtk