diff options
author | Yinhang Liu <yinhangx.liu@intel.com> | 2019-01-10 17:54:21 +0800 |
---|---|---|
committer | Zong Wei <wei.zong@intel.com> | 2019-01-15 15:51:14 +0800 |
commit | 4f05d55be8a3f4627175d73ad24b96ca02415417 (patch) | |
tree | 6e2a91fe083fbd0628bb04ef8cb6ec4de318395f | |
parent | 889b3e6ef792d22a0ca053a5ce831b5491c06b87 (diff) | |
download | libxcam-4f05d55be8a3f4627175d73ad24b96ca02415417.tar.gz |
cv-debug: move image write to cv_utils
-rw-r--r-- | Android.mk | 5 | ||||
-rw-r--r-- | modules/ocv/cv_capi_feature_match.cpp | 34 | ||||
-rw-r--r-- | modules/ocv/cv_feature_match.cpp | 43 | ||||
-rw-r--r-- | modules/ocv/cv_feature_match.h | 6 | ||||
-rw-r--r-- | modules/ocv/cv_feature_match_cluster.cpp | 16 | ||||
-rw-r--r-- | modules/ocv/cv_utils.cpp | 43 | ||||
-rw-r--r-- | modules/ocv/cv_utils.h | 6 |
7 files changed, 75 insertions, 78 deletions
@@ -67,7 +67,10 @@ XCAM_SOFT_SRC_FILES := \ $(NULL) ifeq ($(ENABLE_OPENCV), 1) -XCAM_SOFT_SRC_FILES += modules/ocv/cv_capi_feature_match.cpp +XCAM_SOFT_SRC_FILES += \ + modules/ocv/cv_utils.cpp \ + modules/ocv/cv_capi_feature_match.cpp \ + $(NULL) endif LOCAL_SRC_FILES := $(XCAM_XCORE_SRC_FILES) $(XCAM_SOFT_SRC_FILES) diff --git a/modules/ocv/cv_capi_feature_match.cpp b/modules/ocv/cv_capi_feature_match.cpp index 7590c54..ffed593 100644 --- a/modules/ocv/cv_capi_feature_match.cpp +++ b/modules/ocv/cv_capi_feature_match.cpp @@ -25,11 +25,6 @@ #define XCAM_CV_CAPI_FM_DEBUG 0 namespace XCam { -#if XCAM_CV_CAPI_FM_DEBUG -static void -debug_write_image ( - const SmartPtr<VideoBuffer> &buf, const Rect &rect, char *img_name, char *frame_str, char *fm_idx_str); -#endif CVCapiFeatureMatch::CVCapiFeatureMatch () : FeatureMatch() @@ -239,10 +234,9 @@ CVCapiFeatureMatch::optical_flow_feature_match ( char img_name[256] = {'\0'}; std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_0.jpg", _frame_num, _fm_idx); - debug_write_image (left_buf, left_crop_rect, img_name, frame_str, fm_idx_str); - + write_image (left_buf, left_crop_rect, img_name, frame_str, fm_idx_str); std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_1.jpg", _frame_num, _fm_idx); - debug_write_image (right_buf, right_crop_rect, img_name, frame_str, fm_idx_str); + write_image (right_buf, right_crop_rect, img_name, frame_str, fm_idx_str); XCAM_LOG_INFO ("FeatureMatch(idx:%d): frame number:%d done", _fm_idx, _frame_num); @@ -250,29 +244,5 @@ CVCapiFeatureMatch::optical_flow_feature_match ( #endif } -#if XCAM_CV_CAPI_FM_DEBUG -static void -debug_write_image ( - const SmartPtr<VideoBuffer> &buf, const Rect &rect, char *img_name, char *frame_str, char *fm_idx_str) -{ - cv::Scalar color = cv::Scalar(0, 0, 255); - VideoBufferInfo info = buf->get_video_info (); - - cv::Mat mat; - convert_to_mat (buf, mat); - - cv::putText (mat, frame_str, cv::Point(rect.pos_x, 30), cv::FONT_HERSHEY_COMPLEX, 0.8f, color, 2, 8, false); - cv::putText (mat, fm_idx_str, cv::Point(rect.pos_x, 70), cv::FONT_HERSHEY_COMPLEX, 0.8f, color, 2, 8, false); - - cv::line (mat, cv::Point(rect.pos_x, rect.pos_y), cv::Point(rect.pos_x + rect.width, rect.pos_y), color, 1); - cv::line (mat, cv::Point(rect.pos_x, rect.pos_y + rect.height), - cv::Point(rect.pos_x + rect.width, rect.pos_y + rect.height), color, 1); - - cv::line (mat, cv::Point(rect.pos_x, 0), cv::Point(rect.pos_x, info.height), color, 2); - cv::line (mat, cv::Point(rect.pos_x + rect.width, 0), cv::Point(rect.pos_x + rect.width, info.height), color, 2); - - cv::imwrite (img_name, mat); -} -#endif } diff --git a/modules/ocv/cv_feature_match.cpp b/modules/ocv/cv_feature_match.cpp index eacb42e..5294804 100644 --- a/modules/ocv/cv_feature_match.cpp +++ b/modules/ocv/cv_feature_match.cpp @@ -260,46 +260,31 @@ CVFeatureMatch::optical_flow_feature_match ( _valid_count, _mean_offset, _x_offset, dst_width); #if XCAM_CV_FM_DEBUG - XCAM_ASSERT (_fm_idx >= 0); - - char frame_str[64] = {'\0'}; - std::snprintf (frame_str, 64, "frame:%d", _frame_num); - char fm_idx_str[64] = {'\0'}; - std::snprintf (fm_idx_str, 64, "fm_idx:%d", _fm_idx); - - char img_name[256] = {'\0'}; - std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_0.jpg", _frame_num, _fm_idx); - debug_write_image (left_buf, left_crop_rect, img_name, frame_str, fm_idx_str); - - std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_1.jpg", _frame_num, _fm_idx); - debug_write_image (right_buf, right_crop_rect, img_name, frame_str, fm_idx_str); - - XCAM_LOG_INFO ("FeatureMatch(idx:%d): frame number:%d done", _fm_idx, _frame_num); + debug_write_image (left_buf, right_buf, left_crop_rect, right_crop_rect, _frame_num, _fm_idx); _frame_num++; #endif } void CVFeatureMatch::debug_write_image ( - const SmartPtr<VideoBuffer> &buf, const Rect &rect, char *img_name, char *frame_str, char *fm_idx_str) + const SmartPtr<VideoBuffer> &left_buf, const SmartPtr<VideoBuffer> &right_buf, + const Rect &left_rect, const Rect &right_rect, uint32_t frame_num, int fm_idx) { - cv::Scalar color = cv::Scalar(0, 0, 255); - VideoBufferInfo info = buf->get_video_info (); - - cv::Mat mat; - convert_to_mat (buf, mat); + XCAM_ASSERT (fm_idx >= 0); - cv::putText (mat, frame_str, cv::Point(rect.pos_x, 30), cv::FONT_HERSHEY_COMPLEX, 0.8f, color, 2, 8, false); - cv::putText (mat, fm_idx_str, cv::Point(rect.pos_x, 70), cv::FONT_HERSHEY_COMPLEX, 0.8f, color, 2, 8, false); + char frame_str[64] = {'\0'}; + std::snprintf (frame_str, 64, "frame:%d", frame_num); + char fm_idx_str[64] = {'\0'}; + std::snprintf (fm_idx_str, 64, "fm_idx:%d", fm_idx); - cv::line (mat, cv::Point(rect.pos_x, rect.pos_y), cv::Point(rect.pos_x + rect.width, rect.pos_y), color, 1); - cv::line (mat, cv::Point(rect.pos_x, rect.pos_y + rect.height), - cv::Point(rect.pos_x + rect.width, rect.pos_y + rect.height), color, 1); + char img_name[256] = {'\0'}; + std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_0.jpg", frame_num, fm_idx); + write_image (left_buf, left_rect, img_name, frame_str, fm_idx_str); - cv::line (mat, cv::Point(rect.pos_x, 0), cv::Point(rect.pos_x, info.height), color, 2); - cv::line (mat, cv::Point(rect.pos_x + rect.width, 0), cv::Point(rect.pos_x + rect.width, info.height), color, 2); + std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_1.jpg", frame_num, fm_idx); + write_image (right_buf, right_rect, img_name, frame_str, fm_idx_str); - cv::imwrite (img_name, mat); + XCAM_LOG_INFO ("FeatureMatch(idx:%d): frame number:%d done", fm_idx, frame_num); } } diff --git a/modules/ocv/cv_feature_match.h b/modules/ocv/cv_feature_match.h index f73d700..598cb74 100644 --- a/modules/ocv/cv_feature_match.h +++ b/modules/ocv/cv_feature_match.h @@ -50,8 +50,12 @@ public: protected: bool get_crop_image_umat (const SmartPtr<VideoBuffer> &buffer, const Rect &crop_rect, cv::UMat &img, BufId id); - void add_detected_data (cv::Mat image, cv::Ptr<cv::Feature2D> detector, std::vector<cv::Point2f> &corners); + + void debug_write_image ( + const SmartPtr<VideoBuffer> &left_buf, const SmartPtr<VideoBuffer> &right_buf, + const Rect &left_rect, const Rect &right_rect, uint32_t frame_num, int fm_idx); + void get_valid_offsets (std::vector<cv::Point2f> &corner0, std::vector<cv::Point2f> &corner1, std::vector<uchar> &status, std::vector<float> &error, std::vector<float> &offsets, float &sum, int &count, diff --git a/modules/ocv/cv_feature_match_cluster.cpp b/modules/ocv/cv_feature_match_cluster.cpp index e4ecdb7..af5b1c2 100644 --- a/modules/ocv/cv_feature_match_cluster.cpp +++ b/modules/ocv/cv_feature_match_cluster.cpp @@ -298,21 +298,7 @@ CVFeatureMatchCluster::optical_flow_feature_match ( _mean_offset, _mean_offset_y, _x_offset, _y_offset); #if XCAM_CV_FM_DEBUG - XCAM_ASSERT (_fm_idx >= 0); - - char frame_str[64] = {'\0'}; - std::snprintf (frame_str, 64, "frame:%d", _frame_num); - char fm_idx_str[64] = {'\0'}; - std::snprintf (fm_idx_str, 64, "fm_idx:%d", _fm_idx); - - char img_name[256] = {'\0'}; - std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_0.jpg", _frame_num, _fm_idx); - debug_write_image (left_buf, left_crop_rect, img_name, frame_str, fm_idx_str); - - std::snprintf (img_name, 256, "fm_in_stitch_area_%d_%d_1.jpg", _frame_num, _fm_idx); - debug_write_image (right_buf, right_crop_rect, img_name, frame_str, fm_idx_str); - - XCAM_LOG_INFO ("FeatureMatch(idx:%d): frame number:%d done", _fm_idx, _frame_num); + debug_write_image (left_buf, right_buf, left_crop_rect, right_crop_rect, _frame_num, _fm_idx); _frame_num++; #endif diff --git a/modules/ocv/cv_utils.cpp b/modules/ocv/cv_utils.cpp index ca8b8f8..6379e9e 100644 --- a/modules/ocv/cv_utils.cpp +++ b/modules/ocv/cv_utils.cpp @@ -20,6 +20,9 @@ #include "cv_utils.h" +const static cv::Scalar color = cv::Scalar (0, 0, 255); +const static int fontFace = cv::FONT_HERSHEY_COMPLEX; + namespace XCam { bool convert_to_mat (const SmartPtr<VideoBuffer> &buffer, cv::Mat &img) @@ -51,4 +54,44 @@ bool convert_range_to_mat (const SmartPtr<VideoBuffer> &buffer, const Rect &rang return true; } +void write_image ( + const SmartPtr<VideoBuffer> &buf, const char *img_name, const char *frame_str, const char *idx_str) +{ + XCAM_ASSERT (img_name); + + cv::Mat mat; + convert_to_mat (buf, mat); + + if(frame_str) + cv::putText (mat, frame_str, cv::Point(20, 50), fontFace, 2.0, color, 2, 8, false); + if(idx_str) + cv::putText (mat, idx_str, cv::Point(20, 110), fontFace, 2.0, color, 2, 8, false); + + cv::imwrite (img_name, mat); +} + +void write_image ( + const SmartPtr<VideoBuffer> &buf, const Rect &draw_rect, + const char *img_name, const char *frame_str, const char *idx_str) +{ + XCAM_ASSERT (img_name && frame_str && idx_str); + + cv::Mat mat; + convert_to_mat (buf, mat); + + const Rect &rect = draw_rect; + cv::putText (mat, frame_str, cv::Point(rect.pos_x, 30), fontFace, 0.8f, color, 2, 8, false); + cv::putText (mat, idx_str, cv::Point(rect.pos_x, 70), fontFace, 0.8f, color, 2, 8, false); + + cv::line (mat, cv::Point(rect.pos_x, rect.pos_y), cv::Point(rect.pos_x + rect.width, rect.pos_y), color, 1); + cv::line (mat, cv::Point(rect.pos_x, rect.pos_y + rect.height), + cv::Point(rect.pos_x + rect.width, rect.pos_y + rect.height), color, 1); + + VideoBufferInfo info = buf->get_video_info (); + cv::line (mat, cv::Point(rect.pos_x, 0), cv::Point(rect.pos_x, info.height), color, 2); + cv::line (mat, cv::Point(rect.pos_x + rect.width, 0), cv::Point(rect.pos_x + rect.width, info.height), color, 2); + + cv::imwrite (img_name, mat); +} + } diff --git a/modules/ocv/cv_utils.h b/modules/ocv/cv_utils.h index 27b0108..8b36b90 100644 --- a/modules/ocv/cv_utils.h +++ b/modules/ocv/cv_utils.h @@ -30,6 +30,12 @@ namespace XCam { bool convert_to_mat (const SmartPtr<VideoBuffer> &buffer, cv::Mat &img); bool convert_range_to_mat (const SmartPtr<VideoBuffer> &buffer, const Rect &range, cv::Mat &img); + void write_image ( + const SmartPtr<VideoBuffer> &buf, const char *img_name, const char *frame_str, const char *idx_str); + void write_image ( + const SmartPtr<VideoBuffer> &buf, const Rect &draw_rect, + const char *img_name, const char *frame_str, const char *idx_str); + } #endif // XCAM_CV_UTILS_H |