1
OpenCVをC++で使用してcv::Mat
を処理してから、ROSトピックに出力しています。何らかの理由で、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