|
|
@ -13,7 +13,7 @@ using namespace std; |
|
|
class Traite_image { |
|
|
class Traite_image { |
|
|
public: |
|
|
public: |
|
|
const static int SENSITIVITY_VALUE = 20; |
|
|
const static int SENSITIVITY_VALUE = 20; |
|
|
const static int BLUR_Size = 9; |
|
|
const static int BLUR_SIZE = 9; |
|
|
const static int CLOSE_SIZE = 30; |
|
|
const static int CLOSE_SIZE = 30; |
|
|
const static int ERODE_SIZE = 2; |
|
|
const static int ERODE_SIZE = 2; |
|
|
const static int NB_FRAME_DROP = 1; |
|
|
const static int NB_FRAME_DROP = 1; |
|
|
@ -29,10 +29,10 @@ class Traite_image { |
|
|
ros::NodeHandle n; |
|
|
ros::NodeHandle n; |
|
|
|
|
|
|
|
|
image_transport::ImageTransport it; |
|
|
image_transport::ImageTransport it; |
|
|
|
|
|
image_transport::Subscriber sub; |
|
|
image_transport::Publisher pub_img; |
|
|
image_transport::Publisher pub_img; |
|
|
image_transport::Publisher pub_thres; |
|
|
image_transport::Publisher pub_thres; |
|
|
ros::Publisher pub_cmd; |
|
|
ros::Publisher pub_cmd; |
|
|
image_transport::Subscriber sub; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Traite_image() : n("~"),it(n) { |
|
|
Traite_image() : n("~"),it(n) { |
|
|
@ -43,7 +43,8 @@ class Traite_image { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This processes an image and publishes the result.
|
|
|
// Callback function executedwhen recieving an image from the camera
|
|
|
|
|
|
// Publishes to /papillon/image_out
|
|
|
void on_image(const sensor_msgs::ImageConstPtr& msg) { |
|
|
void on_image(const sensor_msgs::ImageConstPtr& msg) { |
|
|
|
|
|
|
|
|
cv_bridge::CvImageConstPtr bridge_input; |
|
|
cv_bridge::CvImageConstPtr bridge_input; |
|
|
@ -88,7 +89,7 @@ class Traite_image { |
|
|
prevs.pop_back(); |
|
|
prevs.pop_back(); |
|
|
prevs.insert(prevs.begin(), next.clone()); |
|
|
prevs.insert(prevs.begin(), next.clone()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void stabiliseImg(cv::Mat prev, cv::Mat cur, cv::Mat &output){ |
|
|
void stabiliseImg(cv::Mat prev, cv::Mat cur, cv::Mat &output){ |
|
|
cv::Mat cur_grey, prev_grey; |
|
|
cv::Mat cur_grey, prev_grey; |
|
|
cv::cvtColor(cur, cur_grey, cv::COLOR_BGR2GRAY); |
|
|
cv::cvtColor(cur, cur_grey, cv::COLOR_BGR2GRAY); |
|
|
@ -118,11 +119,7 @@ class Traite_image { |
|
|
} |
|
|
} |
|
|
T.copyTo(last_T); |
|
|
T.copyTo(last_T); |
|
|
|
|
|
|
|
|
cv::Mat cur2; |
|
|
cv::warpAffine(cur, output, T, cur.size(),cv::INTER_CUBIC|cv::WARP_INVERSE_MAP); |
|
|
|
|
|
|
|
|
cv::warpAffine(cur, cur2, T, cur.size(),cv::INTER_CUBIC|cv::WARP_INVERSE_MAP); |
|
|
|
|
|
|
|
|
|
|
|
cur2.copyTo(output); |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
void searchForMovement(cv::Mat prev, cv::Mat cur, cv::Mat &output, cv::Mat &out2){ |
|
|
void searchForMovement(cv::Mat prev, cv::Mat cur, cv::Mat &output, cv::Mat &out2){ |
|
|
@ -130,8 +127,8 @@ class Traite_image { |
|
|
cur.copyTo(output); |
|
|
cur.copyTo(output); |
|
|
cv::cvtColor(prev, prev_grey, cv::COLOR_BGR2GRAY); |
|
|
cv::cvtColor(prev, prev_grey, cv::COLOR_BGR2GRAY); |
|
|
cv::cvtColor(cur, cur_grey, cv::COLOR_BGR2GRAY); |
|
|
cv::cvtColor(cur, cur_grey, cv::COLOR_BGR2GRAY); |
|
|
cv::GaussianBlur(prev_grey, prev_grey, cv::Size(BLUR_Size,BLUR_Size), 3.0); |
|
|
cv::GaussianBlur(prev_grey, prev_grey, cv::Size(BLUR_SIZE,BLUR_SIZE), 3.0); |
|
|
cv::GaussianBlur(cur_grey, cur_grey, cv::Size(BLUR_Size,BLUR_Size), 3.0); |
|
|
cv::GaussianBlur(cur_grey, cur_grey, cv::Size(BLUR_SIZE,BLUR_SIZE), 3.0); |
|
|
|
|
|
|
|
|
// Subtract the 2 last frames and threshold them
|
|
|
// Subtract the 2 last frames and threshold them
|
|
|
cv::Mat thres; |
|
|
cv::Mat thres; |
|
|
@ -144,7 +141,7 @@ class Traite_image { |
|
|
cv::erode(thres, thres, element ); |
|
|
cv::erode(thres, thres, element ); |
|
|
|
|
|
|
|
|
cv::threshold(thres, thres, SENSITIVITY_VALUE, 255, cv::THRESH_BINARY); |
|
|
cv::threshold(thres, thres, SENSITIVITY_VALUE, 255, cv::THRESH_BINARY); |
|
|
|
|
|
|
|
|
// Intermediate output
|
|
|
// Intermediate output
|
|
|
thres.copyTo(out2); |
|
|
thres.copyTo(out2); |
|
|
|
|
|
|
|
|
@ -223,4 +220,4 @@ int main(int argc, char **argv) |
|
|
ros::spin(); |
|
|
ros::spin(); |
|
|
|
|
|
|
|
|
return 0; |
|
|
return 0; |
|
|
} |
|
|
} |
|
|
|