Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用C++;_C++_Opencv_Heatmap - Fatal编程技术网

C++ 使用C++;

C++ 使用C++;,c++,opencv,heatmap,C++,Opencv,Heatmap,我想从附加的图像中获取热图。较大的斑点将有较深(红色)的区域,然后慢慢淡入较浅的蓝色阴影。较小的水滴会有较轻的变化。但请记住,较大水滴的中心应该是最热的区域。 我认为使用高斯模糊和阈值化可以使斑点变得更加曲线美 我使用了opencvs方法,比如使用距离变换,然后使用apply colormap。但这感觉更像是一个倒转的圆圈,像是水滴的骨架(变薄)。我想要一个更好的梯度热图 我希望它更像 不像opencv中的那样,您可以简单地在各个blob之间循环,以找到单个blob颜色贴图。这是一个示例实现。

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

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

我希望它更像


不像opencv中的那样,您可以简单地在各个blob之间循环,以找到单个blob颜色贴图。这是一个示例实现。您可以随意使用。希望这有帮助

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);

矢量轮廓;
向量层次;
///查找轮廓以遮罩各个轮廓
findContours(mSource_Gray、等高线、层次、RETR_树、链近似、点(0,0));
///绘制等高线(遮罩)
Mat mBlobMask=Mat::zeros(mSource_Gray.size(),CV_8UC1);
对于(size_t i=0;i

你不能完全按照你所展示的去做。更大的斑点不一定对应更高的强度。对于热图,您需要每个点的实际热量,而不仅仅是二进制掩码。但我仍在寻找更复杂的方法。
//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);
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);