阈值分割c语言(c语言值域)

阈值分割c语言(c语言值域)

  本篇文章给大家谈谈阈值分割c语言,以及c语言值域对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

  本文目录一览:

阈值分割c语言(c语言值域)

  1、sobel算子里的阈值是怎么设的

2、openmv中颜色识别和测距怎么同时实现

3、如何用C语言实现对图像的二值化?

4、C语言解决设置参数阈值问题

5、如何把BMP图片二值化?

6、使用canny算子检测到了边缘后期如何使用阈值分割?

  sobel算子里的阈值是怎么设的

  sobel算子的阈值指的是其各像素经过偏导计算后得到的grad=fx+fy,对grad进行阈值分割得到边缘的。

  由于在sobel算子中加入了权值所以所得的结果会导致所得边缘较宽。

  fx=abs(Data[i+1][j-1]+2*Data[i+1][j]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i-1][j]-Data[i-1][j+1]);

  fy=abs(Data[i-1][j+1]+2*Data[i][j+1]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i][j-1]-Data[i+1][j-1]);

  上面两个即为加权计算的偏导计算公式。

  sobel函数如下:

  /***************************************************************

  sobel算子

  ***************************************************************/

  void sobel(unsigned char Data[][256],unsigned char xData[])

  {

  int i,j;

  int fx,fy,grad;

  for(i=1;i255;i++)

  for(j=1;j255;j++)

  {

  fx=abs(Data[i+1][j-1]+2*Data[i+1][j]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i-1][j]-Data[i-1][j+1]);

  fy=abs(Data[i-1][j+1]+2*Data[i][j+1]+Data[i+1][j+1]-Data[i-1][j-1]-2*Data[i][j-1]-Data[i+1][j-1]);

  grad=fx+fy;

  if(grad100)

  xData[i*256+j]=255;

  else

  xData[i*256+j]=0;

  }

  return;

  }

  上面的值100即为阈值。

  这是本人完成数字图像处理实验的程序,能够运行。

  openmv中颜色识别和测距怎么同时实现

  openmv中颜色识别和测距同时实现要通过OpenCV将物体通过阈值分割的方式提取出来后,画出物体矩形轮廓,测距时为避免外围物体和其他部分有交叠导致距离不准确的问题,只提取出物体中心的1/2区域进行50个随机采样点测距,并用中值滤波的方式稳定预测结果。OpenMV是一个开源,低成本,功能强大的机器视觉模块。以STM32F767CPU为核心,集成了OV7725摄像头芯片,在小巧的硬件模块上,用C语言高效地实现了核心机器视觉算法,提供Python编程接口。使用者们(包括发明家、爱好者以及智能设备开发商)可以用python语言使用OpenMV提供的机器视觉功能,为自己的产品和发明增加有特色的竞争力。openmv中颜色识别和测距同时实现要通过OpenCV将物体通过阈值分割的方式提取出来后,画出物体矩形轮廓,测距时为避免外围物体和其他部分有交叠导致距离不准确的问题,只提取出物体中心的1/2区域进行50个随机采样点测距,并用中值滤波的方式稳定预测结果。

  如何用C语言实现对图像的二值化?

  /*************************************************************************

  * 该函数用于对图像进行阈值分割运算

  * 参数:

  * LPSTR lpDIBBits – 指向源DIB图像指针

  * LONG lWidth – 源图像宽度(象素数)

  * LONG lHeight – 源图像高度(象素数)

  ************************************************************************/

  BOOL ImageChangeProc::ThresholdDIB(LPSTR lpDIBBits,LONG lWidth, LONG lHeight)

  {

  // 指向源图像的指针

  LPSTR lpSrc;

  // 指向缓存图像的指针

  LPSTR lpDst;

  // 指向缓存DIB图像的指针

  LPSTR lpNewDIBBits;

  HLOCAL hNewDIBBits;

  //循环变量

  long i;

  long j;

  unsigned char pixel;

  long lHistogram[256];

  //阈值,最大灰度值与最小灰度值,两个区域的平均灰度值

  unsigned char Threshold,NewThreshold,MaxGrayValue,MinGrayValue,Temp1GrayValue,Temp2GrayValue;

  //用于计算区域灰度平均值的中间变量

  long lP1,lP2,lS1,lS2;

  //迭代次数

  int IterationTimes;

  LONG lLineBytes;

  hNewDIBBits = LocalAlloc(LHND, lWidth * lHeight);

  if (hNewDIBBits == NULL)

  {

  // 分配内存失败

  return FALSE;

  }

  // 锁定内存

  lpNewDIBBits = (char * )LocalLock(hNewDIBBits);

  // 初始化新分配的内存

  lpDst = (char *)lpNewDIBBits;

  memset(lpDst, (BYTE)255, lWidth * lHeight);

  lLineBytes = WIDTHBYTES(lWidth * 8);

  for (i = 0; i 256;i++)

  {

  lHistogram[i]=0;

  }

  //获得直方图

  MaxGrayValue = 0;

  MinGrayValue = 255;

  for (i = 0;i lWidth ;i++)

  {

  for(j = 0;j lHeight ;j++)

  {

  lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

  pixel = (unsigned char)*lpSrc;

  lHistogram[pixel]++;

  //修改最大,最小灰度值

  if(MinGrayValue pixel)

  {

  MinGrayValue = pixel;

  }

  if(MaxGrayValue pixel)

  {

  MaxGrayValue = pixel;

  }

  }

  }

  //迭代求最佳阈值

  NewThreshold = (MinGrayValue + MaxGrayValue)/2;

  Threshold = 0;

  for(IterationTimes = 0; Threshold != NewThreshold IterationTimes 1000;IterationTimes ++)

  {

  Threshold = NewThreshold;

  lP1 =0;

  lP2 =0;

  lS1 = 0;

  lS2 = 0;

  //求两个区域的灰度平均值

  for (i = MinGrayValue;i =Threshold;i++)

  {

  lP1 += lHistogram[i]*i;

  lS1 += lHistogram[i];

  }

  for (i = Threshold+1;iMaxGrayValue;i++)

  {

  lP2 += lHistogram[i]*i;

  lS2 += lHistogram[i];

  }

  if(lS1==0||lS2==0)

  {

  // 释放内存

  LocalUnlock(hNewDIBBits);

  LocalFree(hNewDIBBits);

  return FALSE;

  }

  Temp1GrayValue = (unsigned char)(lP1 / lS1);

  Temp2GrayValue = (unsigned char)(lP2 / lS2);

  NewThreshold = (Temp1GrayValue + Temp2GrayValue)/2;

  }

  //根据阈值将图像二值化

  for (i = 0;i lWidth ;i++)

  {

  for(j = 0;j lHeight ;j++)

  {

  lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

  lpDst = (char *)lpNewDIBBits + lLineBytes * j + i;

  pixel = (unsigned char)*lpSrc;

  if(pixel = Threshold)

  {

  *lpDst = (unsigned char)0;

  }

  else

  {

  *lpDst = (unsigned char)255;

  }

  }

  }

  // 复制图像

  memcpy(lpDIBBits, lpNewDIBBits, lWidth * lHeight);

  // 释放内存

  LocalUnlock(hNewDIBBits);

  LocalFree(hNewDIBBits);

  // 返回

  return TRUE;

  }

  参考:

  C语言解决设置参数阈值问题

  仅以每次加1为例

  0-8可以每次都执行i=(i+1)%9,

  2-255可以每次都执行i=(i+1)%254+2,

  0-99可以每次都执行i=(i+1)%100

  这样就不用加判断了

  如何把BMP图片二值化?

  bmp图像的二值化有很多种方法,最简单的就是阈值分割

  当某像素值阈值 就置像素值为255

  当某像素值阈值 就置像素值为0

  这个时候还得确定你处理的bmp图像是多少bits的,一般情况下处理24位的居多,我这有一个用C语言写的图像二值化的程序,如果想要的话,把邮箱留一下,发给你。

  使用canny算子检测到了边缘后期如何使用阈值分割?

  不是空的,赋值的时候出错了,我改了一点,不知道对你有用没。。 % clear;close all I=imread(‘1.jpg’);%读入原始jpg格式图像 figure plot(1,1) imshow(I) W=size(I,2); %得到图像高度 I1=rgb2gray(I);%将原图像转化为灰度图象 figure;subplot(221); imshow(I1);title(‘灰度图像’); I2=medfilt2(I1);%滤波默认窗口为[3,3] subplot(222);imshow(I2);title(‘中值滤波结果’); I3=filter2(fspecial(‘average’,3),I1)/255; %模板尺寸为3 subplot(223);imshow(I3);title(‘均值滤波结果’); I4=wiener2(I1,[3 3]); %对图像进行二维自适应维纳滤波 subplot(224);imshow(I4); title(‘自适应滤波结果’); J=[I1,I2,I3,I4];%这里的矩阵为什么是空的? for j=1:4; Ij=J(:,1+W*(j-1):W*j); %%给Ij赋值 BW1=edge(Ij,’prewitt’);%边缘检测 BW2=edge(Ij,’canny’); BW3=edge(Ij,’log’); BW4=edge(Ij,’sobel’); figure; subplot(221);imshow(BW1);title(‘prewitt算子’); subplot(222);imshow(BW2);title(‘canny算子’); subplot(223);imshow(BW3);title(‘laplacian算子’); subplot(224);imshow(BW4);title(‘sobel算子’); end figure;subplot(121);imhist(I1);title(‘灰度直方图’);%观察灰度直方图, 灰度200处有谷,确定阈值T=200 I5=im2bw(I1,220/255); % im2bw函数需要将灰度值转换到[0,1]范围内 subplot(122);imshow(I5);title(‘直方图阈值分割效果’);

  阈值分割c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于c语言值域、阈值分割c语言的信息别忘了在本站进行查找喔。

以上是嗨壳技术分享网(www.heikehao.com)小编对“ 阈值分割c语言(c语言值域) ”的详细解答,希望能够帮助到大家。

原创文章,作者:语言我知,如若转载,请注明出处:https://www.heikehao.com/139.html

(0)
语言我知语言我知
上一篇 2020年1月2日
下一篇 2020年1月2日

相关推荐

  • 关于c语言的填空题

    今日,嗨壳技术分享网小编分享关于c语言的填空题 相关内容,内容如下。   c语言填空题   1、1.一个C源程序中至少应包括一个___主函数___。2. 若a是int型,且a的初值…

    2020年6月15日
  • 关于c语言人脸识别系统源码的信息

    今天,嗨壳技术分享网给大家整理一些关于c语言人脸识别系统源码的信息内容。   本篇文章给大家谈谈c语言人脸识别系统源码,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 …

    2020年10月29日
  • c语言中的strchr,C语言中的struct

    今天,嗨壳技术分享网给大家整理一些c语言中的strchr,C语言中的struct内容。   C语言strchr函数,其中chr是什么单词的缩   (strchr(s,.))brea…

    2020年1月19日
  • c语言转义符单引号(c语言字符单引号)

    今日,嗨壳技术分享网小编分享c语言转义符单引号(c语言字符单引号) 相关内容,内容如下。   本篇文章给大家谈谈c语言转义符单引号,以及c语言字符单引号对应的知识点,希望对各位有所…

    2020年1月26日
  • 投票c语言,c语言投票计数

    投票c语言,c语言投票计数   c语言编写一个选票统计程序4个候选人分别用ABCD表示,现有20人进行投票…   1、Press any key to continue…

    2020年5月20日
  • c语言运行有错误 – c语言运行错误spawning

    针对c语言运行有错误 – c语言运行错误spawning的内容, 嗨壳技术分享网今天给大家作出详细的解答吧!   为什么我写的C语言程序编译时没错,运行时有错误   1…

    2020年1月4日
  • 浙大c语言答第一周(浙大c语言第三版答案)

    今天,嗨壳技术分享网给大家整理一些浙大c语言答第一周(浙大c语言第三版答案)内容。   今天给各位分享浙大c语言答第一周的知识,其中也会对浙大c语言第三版答案进行解释,如果能碰巧解…

    2020年6月3日
  • 用ifc语言debugerror

    针对用ifc语言debugerror的内容, 嗨壳技术分享网今天给大家作出详细的解答吧!   c语言编写的程序中数据量一大就会出现出现debug error   #include …

    2020年6月4日
  • 飞机大战c语言源代码,c语言飞机大战简单代码

    飞机大战c语言源代码,c语言飞机大战简单代码 大家并不陌生,借来给大家详细说说吧!   诺基亚手机的飞机大战游戏的开发语言?   应该是java游戏,即使找到了,以现在的安卓手机无…

    2020年1月2日
  • 网页设计与c语言的简单介绍

    网页设计与c语言的简单介绍   c语言可以用于制作网页吗?   C语言不适合用于写网页,虽然可以用C语言写CGI程序,但是这种方法现在已经被PHP/ASP/JSP等动态页面技术取代…

    2020年6月11日