weixin_55229655
西表山喵
采纳率0%
2021-05-08 20:32 阅读 106
已结题

代码转化,C++转Java

50
//.cpp
double CImgProcess::shang()
{
	double s, h;
	double nHeight = GetHeight();             //获取图像像素高度
	double nWidth = GetWidthPixel();          //获取图像像素宽度
        int array[256]={0};
        double p[256]={0};
	int i, j, n;                             //循环变量
	s=nHeight*nWidth;                     //求总的像素个数
        h=0;
      for(n=0; n<256; n++)                //像素灰度级小于256进行循环
      {
	for(i=0; i<nHeight; i++)                 //高度小于图像像素高度进行循环
	{
		for(j=0; j<nWidth; j++)             //宽度小于像素宽度进行循环
		{
		  if(GetGray(j,i)==n)              //统计灰度级为n的像素个数
                    { array[n]++;
                      p[n]=array[n]/s;   //求出灰度级n所占的比例 
                     }
		}
	}
      }
	for(n=0;n<256;n++)                  //像素灰度级小于256进行循环
	{ 
		if(p[n]!=0)                     //找到概率不为0的灰度级n
		{
           h=h-p[n]*log(p[n])/log(2);     //熵的累加计算公式
		}
	}
	return h;
}
//.h
double shang();
//Edit code
void CDIPDemoView::OnShang() 
{ 
	                                         //计算灰度共现矩阵
	                                         // 获得文档类指针
	CDIPDemoDoc* pDoc = GetDocument();
	                                         // 输入对象
	CImgProcess imgInput = pDoc->m_Image;
	                                         // 检查图像是灰度图像
	if (imgInput.m_pBMIH->biBitCount!=8)
	{
		AfxMessageBox("不是8-bpp灰度图像,无法处理!");
		return;
	}
	double h=imgInput.shang();
	CString str;
	str.Format("{%.2lf}",h);
	AfxMessageBox(str);
}
//.cpp
double CImgProcess::fangcha()
{
	double a,b;
	double nHeight = GetHeight();          //获取图像的像素高
	double nWidth = GetWidthPixel();       //获取图像的像素宽
        double p[256]={0};              //像素灰度的概率初设
        int array[256]={0};
	int i, j, n;                          //循环变量
	double s=0;
        b=0;
		for(i=0; i<nHeight; i++)          //高度小于图像像素高就进行循环
	{
		for(j=0; j<nWidth; j++)           //宽度小于图像像素宽就进行循环
		{
			s=s+GetGray(j,i);            //求所有像素点的灰度值和
		}
	}
        a=s/(nHeight*nWidth);          //均值=灰度值和/像素点和
        for(n=0; n<256; n++)           //像素灰度级小于256进行循环
      {
	for(i=0; i<nHeight; i++)             //小于图像像素高就进行循环
	{
		for(j=0; j<nWidth; j++)          //小于图像像素宽就进行循环
		{
		  if(GetGray(j,i)==n)           //统计出每个灰度级的像素点个数
                    { array[n]++;
                     }
		}
	}
      }
          for(n=0;n<256;n++)
{       
                      p[n]=array[n]/(nHeight*nWidth);//求出每个灰度级的概率
                         
}
         for(n=0; n<256; n++)
                {
			b=b+(n-a)*(n-a)*p[n];    //基于灰度直方图的图像方差计算公式
		}
	return b;
}
//.h
double fangcha();
//Edit code
void CDIPDemoView::OnFangcha() 
{ 
	                                         //计算灰度共现矩阵
	                                         // 获得文档类指针
	CDIPDemoDoc* pDoc = GetDocument();
	                                         // 输入对象
	CImgProcess imgInput = pDoc->m_Image;
	                                         // 检查图像是灰度图像
	if (imgInput.m_pBMIH->biBitCount!=8)
	{
		AfxMessageBox("不是8-bpp灰度图像,无法处理!");
		return;
	}
	double b=imgInput.fangcha();
	CString str;
	str.Format("{%.2lf}",b);
	AfxMessageBox(str);
}
//Edit code
void CDIPDemoView::OnDuibidu()//计算灰度共生矩阵
{	                                     // 获得文档类指针
	CDIPDemoDoc* pDoc = GetDocument(); 
	CImgProcess imgInput = pDoc->m_Image;	// 输入对象
	if (imgInput.m_pBMIH->biBitCount!=8)    // 检查图像是灰度图像
	{
		AfxMessageBox("不是8-bpp灰度图像,无法处理!");
		return;
	}	                                         
	POINT ptD1, ptD2;                        //设定两个点的位置关系
	                                       //水平灰度共生矩阵
	ptD1.x = 1;
	ptD1.y = 0;
	ptD2.x = -1;
	ptD2.y = 0;
/*
	                                            //+45度灰度共生矩阵
	ptD1.x = 1;
	ptD1.y = -1;
	ptD2.x = -1;
	ptD2.y = +1;
*/
	//计算灰度共现矩阵
	vector< vector<int> > GrayMat = imgInput.GetGrayMatrix(ptD1, ptD2);
	CString str;
      double s=0;
      double t=0;
      int i,j;
      int m = GrayMat.size();     //灰度公式矩阵的元素个数m
        for(i=0; i<m; i++)       //i小于m就进行循环
	{
		for(j=0; j<m; j++)        //j小于m就进行循环
		{
	           s=GrayMat[j][i]+s;       //灰度公式矩阵元素值累加
                 }
        }
        for(i=0; i<m; i++)
	    {
		for(j=0; j<m; j++)
		       {
	                  t=(GrayMat[j][i]/s)*(i-j)*(i-j)+t;  //对比度计算公式
                       }
        }	              //弹出对话框,显示灰度共现矩阵
	str.Format("{%.4lf}", t);
	AfxMessageBox(str);
}
//Edit code
void CDIPDemoView::OnXiangguandu() 
{                                               	//计算灰度共现矩阵
	                                             // 获得文档类指针
	CDIPDemoDoc* pDoc = GetDocument();                                                   
	CImgProcess imgInput = pDoc->m_Image;          // 输入对象
	if (imgInput.m_pBMIH->biBitCount!=8)            // 检查图像是灰度图像
	{
		AfxMessageBox("不是8-bpp灰度图像,无法处理!");
		return;
	}                                             
	POINT ptD1, ptD2; 	                   //设定两个点的位置关系
	                                    //水平灰度共生矩阵
	ptD1.x = 1;
	ptD1.y = 0;
	ptD2.x = -1;
	ptD2.y = 0;
/*	                                         //+45度灰度共现矩阵
	ptD1.x = 1;
	ptD1.y = -1;
	ptD2.x = -1;
	ptD2.y = +1;
*/	                                         //计算灰度共生矩阵
	vector< vector<int> > GrayMat = imgInput.GetGrayMatrix(ptD1, ptD2);
	CString str;
      double s=0;
      double t=0;
      double a=0;
      double b=0;
      double c=0;
      double d=0;
      double q=0;
      int i,j;
      int m = GrayMat.size();                    //灰度共生矩阵元素个数
        for(i=0; i<m; i++)
	{
		for(j=0; j<m; j++)
		{
	           s=GrayMat[j][i]+s;       //求出灰度共生矩阵所有元素和
                 }
        }
        for(i=0; i<m; i++)              //i小于m进行循环
	    {
		for(j=0; j<m; j++)              //j小于m进行循环
		       {
	                  a=(GrayMat[j][i]/s)*i+a;  //相关性中μx
                       }
        }
         for(i=0; i<m; i++)
	    {
		for(j=0; j<m; j++)
		       {
	                  b=(GrayMat[j][i]/s)*j+b;  //相关性中μy
                       }
        }
         for(i=0; i<m; i++)
	    {
		for(j=0; j<m; j++)
		       {
	                  c=(GrayMat[j][i]/s)*(i-a)*(i-a)+c; //相关性中σx
                       }
        }
            for(i=0; i<m; i++)
	    {
		for(j=0; j<m; j++)
		       {
	                  d=(GrayMat[j][i]/s)*(j-b)*(j-b)+d;  //相关性中σy
                       }
        }
            for(i=0; i<m; i++)
	    {
		for(j=0; j<m; j++)
		       {
	                  q=q+(GrayMat[j][i]/s)*i*j;    //相关性计算公式
                       }
        }
                t=(q-a*b)/(sqrt(c*d));	          //相关性计算公式
	str.Format("{%.4lf}", t);                //弹出对话框,显示灰度共生矩阵
	AfxMessageBox(str);
}

C++转java,用于Android studio做app,带注释最好

  • 点赞
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • technologist_32 CSDN专家-Time 2021-05-08 20:50

    这里面用了不知名的类库哦,不太好转哦。是opencv吗

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-10 10:26

    您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

    点赞 评论 复制链接分享
  • QA_Assistant 有问必答小助手 2021-05-11 14:59

    非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

    速戳参与调研>>>https://t.csdnimg.cn/Kf0y

    点赞 评论 复制链接分享

相关推荐