12 #include <glm/gtc/matrix_transform.hpp> 13 #include <glm/gtc/type_ptr.hpp> 15 #include <opencv2/core/core.hpp> 16 #include <opencv2/calib3d/calib3d.hpp> 17 #include <opencv2/imgproc/imgproc.hpp> 22 const std::list<std::string>& skeleton_part,
28 skeleton_part_(skeleton_part)
30 std::cout << log_ID_ <<
"Setting up default projection matrix." << std::endl;
32 setProjectionMatrix(cam_fx, cam_fy, cam_cx, cam_cy);
48 cam_pos_ = glm::make_vec3(cam_x);
49 root_to_eye_ = glm::transpose(glm::mat3(glm::rotate(glm::mat4(1.0f), static_cast<float>(cam_o[3]), glm::vec3(static_cast<float>(cam_o[0]), static_cast<float>(cam_o[1]), static_cast<float>(cam_o[2])))));
51 glm::vec2 ee_px = getWorldToPixel((objpos_map.find(skeleton_part_.front())->second).data());
53 cv::Point endeffector_point(static_cast<int>(ee_px.x), static_cast<int>(ee_px.y));
54 cv::circle(img, endeffector_point, 4, cv::Scalar(0, 255, 0), 4);
56 for (
auto part = ++skeleton_part_.cbegin(); part != skeleton_part_.cend(); ++part)
58 cv::Point base_line = endeffector_point;
59 for (
auto map = objpos_map.equal_range(*part).first; map != objpos_map.equal_range(*part).second; ++map)
61 glm::vec2 joint_px = getWorldToPixel((map->second).data());
63 cv::Point joint_point(static_cast<int>(joint_px.x), static_cast<int>(joint_px.y));
65 cv::circle(img, joint_point, 3, cv::Scalar(0, 0, 255), 4);
66 cv::line(img, base_line, joint_point, cv::Scalar(255, 0, 0), 2);
68 base_line = joint_point;
90 projection_ = glm::mat3(cam_fx, 0.0f, 0.0f,
92 cam_cx, cam_cy, 1.0f);
100 glm::vec3 pos = glm::make_vec3(world_point);
103 return glm::vec2(px_h) / px_h.z;
SISkeleton(const std::list< std::string > &skeleton_part, const float cam_fx, const float cam_fy, const float cam_cx, const float cam_cy)
glm::vec2 getWorldToPixel(const double *world_point)
std::multimap< std::string, ModelPose > ModelPoseContainer
bool setProjectionMatrix(const float cam_fx, const float cam_fy, const float cam_cx, const float cam_cy)
bool superimpose(const ModelPoseContainer &objpos_map, const double *cam_x, const double *cam_o, cv::Mat &img) override