根据高度图计算体积等。

根据高度图计算体积等。

1、2017年8月2日14:31:18。

//计算高度图的面积(mm^2)、体积(mm^3)、平均高度(mm)。
//输入高度图:高度单位mm。
//每像素18.3um=0.0183mm。
int CalVolumeByHeightMat(const cv::Mat & HeightMat,double & dArea, double & dVolume, double & dAveHeight, double dMmPerPixel);

//计算高度图的面积(mm^2)、体积(mm^3)、平均高度(mm)。
//输入高度图:高度单位mm。
//输入掩码矩阵.
//每像素18.3um=0.0183mm。
int CalVolumeByHeightSrcMat(const cv::Mat & HeightSrcMat, const cv::Mat & MaskMat, double & dArea, double & dVolume, double & dAveHeight);

int TestCalVolumeByHeightSrcMat(const cv::Mat & HeightSrcMat, double & dArea, double & dVolume, double & dAveHeight);


int CalVolumeByHeightMat(const cv::Mat & HeightMat, double & dArea, double & dVolume, double & dAveHeight, double dMmPerPixel)
{
	int nCount = countNonZero(HeightMat);
	if (nCount <= 0)
	{
		dArea = 0;
		dVolume = 0;
		dAveHeight = 0;
		return 1;
	}
	cv::Scalar  vSum = sum(HeightMat);
	double  dTmpVolume = vSum[0];
	dAveHeight = dTmpVolume / nCount;
	dArea = nCount * dMmPerPixel * dMmPerPixel;
	dVolume = dTmpVolume * dMmPerPixel * dMmPerPixel;
	return 1;
}

int CalVolumeByHeightSrcMat(const cv::Mat & HeightSrcMat, const cv::Mat & MaskMat, double & dArea, double & dVolume, double & dAveHeight)
{
	int nHeightRows = HeightSrcMat.rows;
	int nHeightCols = HeightSrcMat.cols;

	int nMaskRows = MaskMat.rows;
	int nMaskCols = MaskMat.cols;

	cv::Mat HeightMat;
	if ((nHeightRows == nMaskRows) && (nHeightCols == nMaskCols))
	{
		HeightSrcMat.copyTo(HeightMat, MaskMat);
	}
	else
	{
		HeightSrcMat.copyTo(HeightMat);
	}

	//每像素18.3um=0.0183mm。
	double dMmPerPixel = 0.0183;

	CalVolumeByHeightMat( HeightMat, dArea, dVolume, dAveHeight, dMmPerPixel);
	return 1;
}

int TestCalVolumeByHeightSrcMat(const cv::Mat & HeightSrcMat, double & dArea, double & dVolume, double & dAveHeight)
{
	//cv::Mat MaskMat(HeightSrcMat.size(), CV_8UC1, cv::Scalar::all(255));
	cv::Mat MaskMat(HeightSrcMat.size(), CV_8UC1, cv::Scalar::all(0));

	cv::Rect ROIRect = cv::Rect(0, 0, 15,8);
	cv::Mat ROIMat = MaskMat(ROIRect);
	ROIMat.setTo(cv::Scalar::all(255));

	CalVolumeByHeightSrcMat(HeightSrcMat, MaskMat, dArea,dVolume, dAveHeight);
	return 1;
}


	cv::Mat mat = cv::imread(strFileName, cv::IMREAD_GRAYSCALE);

	double minVal = 0;
	double maxVal = 0;
	cv::minMaxLoc(mat, &minVal,&maxVal);

	const int channels[1] = { 0 };
	const int histSize[1] = { 256 };
	float hranges[2] = { 0,256 };
	const float* ranges[1] = { hranges };
	cv::MatND hist;
	cv::calcHist(&mat, 1, channels, cv::Mat(), hist, 1, histSize, ranges);
	int nNumOf0 = hist.at<float>(0);
	int nNumOfAll = mat.rows * mat.cols;
	hist.at<float>(0) = 0;
	cv::Scalar scalar = cv::sum(hist);
	int nNumOf1 = scalar[0];

	double dArea = 0;
	double dVolume = 0;
	double dAveHeight = 0;
	TestCalVolumeByHeightSrcMat(mat, dArea, dVolume, dAveHeight);


说明:

1、根据高度图计算体积、面积、平均高度。

2、熟悉cv::Mat的部分操作。

3、熟悉直方图使用。

4、熟悉ROI使用。














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值