c++ - 使用 C++ 从不同大小的 blob 生成热图

标签 c++ opencv heatmap

我想从附加图像中获取热图。较大的 Blob 将具有较暗(红色)区域,然后慢慢淡化为较浅的蓝色阴影。较小的 Blob 会有较轻的变化。但请记住,较大 Blob 的中心应该是 HitTest 的区域。 我认为使用高斯模糊和阈值处理可以使 Blob 更加曲线美。

我使用了 opencvs 方法,比如使用距离变换,然后使用应用颜色图。但这感觉更像是倒圆圈,就像 Blob 的骨架(变薄)。我想要一个更好的梯度热图。

enter image description here

我希望它更像 enter image description here

opencv 不是这样 enter image description here

最佳答案

您可以简单地循环浏览单个 Blob 以找到单个 Blob 颜色图。这是一个示例实现。您可以使用任何 Color map随你心意。希望这对您有所帮助!

Mat mSource_Gray,mBlobHeatMap,mHeatMap;
mSource_Gray= imread(FileName_S.c_str(),0);

//Just making sure everything is binary
threshold(mSource_Gray,mSource_Gray,254,255,THRESH_BINARY);
imshow("Source Image",mSource_Gray);

enter image description here

//Finding Distance Transform
Mat mDist,mBlobDist;
distanceTransform(mSource_Gray, mDist, CV_DIST_L2, 3);
normalize(mDist, mDist, 0, 1., cv::NORM_MINMAX);
mDist.convertTo(mDist,CV_8UC1,255,0);
imshow("mDist",mDist);

enter image description here

vector<vector<Point> > contours;
vector<Vec4i> hierarchy;
/// Find contours to Mask out the Individual Contours
findContours( mSource_Gray, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0) );
/// Draw contours (Mask)
Mat mBlobMask = Mat::zeros( mSource_Gray.size(), CV_8UC1 );
for( size_t i = 0; i< contours.size(); i++ )
{
    drawContours( mBlobMask, contours, (int)i, Scalar(255), -1);
    mDist.copyTo(mBlobDist,mBlobMask);
    applyColorMap(mBlobDist,mBlobHeatMap,COLORMAP_JET);
    GaussianBlur(mBlobHeatMap,mBlobHeatMap,Size(21,21),0,0);
    mBlobHeatMap.copyTo(mHeatMap,mBlobMask);
}

imshow("mHeatMap",mHeatMap);

enter image description here

关于c++ - 使用 C++ 从不同大小的 blob 生成热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427189/

相关文章:

python - 使用 Bokeh 绘制具有不同半径(不同大小)和基于值的不同颜色的纬度/经度点

c++ - 从非本地返回一个右值引用

opencv - 链接 : fatal error LNK1104: cannot open file opencv_gpu249d. 库

python - "No module named ' cv2 ' "但已安装

r - R 中热图上按簇对变量进行分组

python - 为来自 Pandas 数据框的轨迹数据绘制热图

c++ - 如何在 C++ 中以编程方式将 wav 转换为 wma?

c++ - 尝试构建基于模板的代码时出错

c++ - 需要帮助从类中调用函数

c++ - 使用 SIMD 进行 HOG 优化