aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYinhang Liu <yinhangx.liu@intel.com>2019-01-10 17:54:21 +0800
committerZong Wei <wei.zong@intel.com>2019-01-15 15:51:14 +0800
commit4f05d55be8a3f4627175d73ad24b96ca02415417 (patch)
tree6e2a91fe083fbd0628bb04ef8cb6ec4de318395f
parent889b3e6ef792d22a0ca053a5ce831b5491c06b87 (diff)
downloadlibxcam-4f05d55be8a3f4627175d73ad24b96ca02415417.tar.gz
cv-debug: move image write to cv_utils
-rw-r--r--Android.mk5
-rw-r--r--modules/ocv/cv_capi_feature_match.cpp34
-rw-r--r--modules/ocv/cv_feature_match.cpp43
-rw-r--r--modules/ocv/cv_feature_match.h6
-rw-r--r--modules/ocv/cv_feature_match_cluster.cpp16
-rw-r--r--modules/ocv/cv_utils.cpp43
-rw-r--r--modules/ocv/cv_utils.h6
7 files changed, 75 insertions, 78 deletions
diff --git a/Android.mk b/Android.mk
index 496f653..ecf1e22 100644
--- a/Android.mk
+++ b/Android.mk
@@ -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