Ommeltu_polku 2016-10-14 09:29 采纳率: 33.3%
浏览 2018

怎么用灰度梯度的方法找图像中的圆的边缘,并标注出来。

请问我要用灰度梯度的方法来找到灰度图像中的圆边缘。现在我的思路是将图像的所有列的像素值依次累加求和,再取均值。这样在圆的区域它的灰度均值会有一个波峰。然后将得到的(1,iwdith)大小的一维矩阵求导数得到梯度矩阵。那么找到这个梯度矩阵中的最大值的位置就是圆边左边边缘的宽度方向上的位置。以下是实现代码,哪里出错了?一直找不到对的边缘位置。。。还有程序中的数据类型可能因为有问题,请大家多多指出啊~~

#include "stdafx.h"
#include "highgui.h"
#include

using namespace std;
using namespace cv;

IplImage* GrayImage;
int main()

{

const char *pstrImageName = "D:\\picture\\New\\1 (4).bmp";   
GrayImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_GRAYSCALE); 

cvShowImage("灰度图像",GrayImage);       
Mat SmothImage ; 
Mat AverageVal = cvCreateMat(1, GrayImage->width, CV_64FC1);
Mat Gray_Image(GrayImage);
GaussianBlur( Gray_Image, SmothImage, Size( 3, 3 ), 0, 0 );
imshow("高斯滤波处理",SmothImage);

int iWidth = SmothImage.rows;
int iHeight = SmothImage.cols;
int i,j;
cv::Mat AverageValue( 1, iWidth, CV_32FC1 );
for (i=0;i<iWidth;i++)
{
    float value = 0;
    for (j=0;j<iHeight;j++)
    {
        value = value + (float)SmothImage.at<uchar>(j,i);

    }
    value = value/(float)iHeight;
    //CV_MAT_ELEM( *AverageValue, float,0, i ) = value;
    AverageValue.at<uchar>(0,i) = value;
    //printf("%f\n",AverageValue.at<float>(0,i));
}


imshow("所有列灰度均值",AverageValue);

cv::Mat GradValue(1,iWidth, CV_32FC1);
for (i=0;i<iWidth-1;i++)
{
    GradValue.at<uchar>(0,i) = (float)AverageValue.at<uchar>(0,i+1)-(float)AverageValue.at<uchar>(0,i);

    printf("%f\n",(float)AverageValue.at<uchar>(0,i+1)-(float)AverageValue.at<uchar>(0,i));
}
GradValue.at<uchar>(0,iWidth) =0;
double minVal, maxVal;
Point minLoc, maxLoc, matchLoc;
minMaxLoc(GradValue, &minVal, &maxVal, &minLoc, &maxLoc, Mat() );
circle( SmothImage, maxLoc, 4, Scalar(255,0,255), -1, 8, 0 );
imshow("边界点所在位置",SmothImage);
cvWaitKey();
return 0;

}


  • 写回答

1条回答 默认 最新

  • devmiao 2016-10-14 16:27
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#网络安全#的问题:求ensp的网络安全,不要步骤要完成版文件
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥20 使用Photon PUN2解决游戏得分同步的问题
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM