저는 ROS 주제로 인쇄하기 전에 cv::Mat
을 처리하기 위해 C++에서 OpenCV를 사용하고 있습니다. 어떤 이유에서인지 cv::drawKeypoints
은 이미지 프레임 너머의 너비로 사실상 스트레칭하여 결과를 망칠 것입니다 : . 오른쪽 토픽의 얼룩은 왼쪽 토픽 왼쪽 상단에있는 얼룩을 나타냅니다. 모두
cv::Mat
가 동일하게 취급됩니다cv :: drawKeypoints가 내 이미지의 크기를 조정하는 이유는 무엇입니까?
image_transport::Publisher pubthresh;
image_transport::Publisher pubkps;
cv::SimpleBlobDetector detector;
void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{
cv::Mat mat = cv_bridge::toCvShare(msg, "bgr8")->image;
cv::cvtColor(mat,mat, CV_BGR2GRAY);
cv::threshold(mat,mat,35,255,0);
std::vector<cv::KeyPoint> keypoints;
detector.detect(mat, keypoints);
cv::Mat kps;
cv::drawKeypoints(mat, keypoints, kps, cv::Scalar(0,0,255), cv::DrawMatchesFlags::DRAW_RICH_KEYPOINTS);
sensor_msgs::ImageConstPtr ithresh,ikps;
ithresh = cv_bridge::CvImage(std_msgs::Header(), "mono8", mat).toImageMsg();
ikps = cv_bridge::CvImage(std_msgs::Header(), "mono8", kps).toImageMsg();
pubthresh.publish(ithresh);
pubkps.publish(ikps);
}
int main(int argc, char **argv)
{
...
image_transport::Subscriber sub = it.subscribe("/saliency_map", 1, imageCallback);
...
}
cv::drawKeypoints
수술 후 :
여기 내 코드입니다. 문서에 따르면 이미지의 크기가 조정되지 않아야합니다. 내가 여기서 무엇을 놓치고 있니?
그래, 그게 다야! 감사! – user4457190