betterhalf 2016-05-11 08:37 采纳率: 15.4%
浏览 2453

Sobel边缘检测,为何输出不对呢

//Sobel边缘检测

//卷积
// H 模板高
// W 模板宽
// C模板系数
// CX 中心元素横坐标
// CY 中心元素纵坐标
//fpArray 指向模板数组的指针
//C 模板系数

void Templat( unsigned char *dst,int H, int W, int CX,int CY,int C ,int *Template)

{
IplImage*image;
image = cvLoadImage("1.jpg", 0);
cvNamedWindow("image");
cvShowImage("image", image);
int width = image->width;
int height = image->height;
unsigned char *ptr;

int i, j, k, l;

for (j = CY;j < height - H + CY + 1;j++) 
{
    for (i = CX;i < width - W + CX + 1;i++)
    {

        for (k = 0;k < H;k++)  
        {
            for (l = 0;l < W;l++)
            {
                ptr = (unsigned char*)image->imageData + j*image->widthStep + i;
                ptr = ptr + *((unsigned char *)image->imageData + (j - CY + k)*width + (i - CX + l))*Template[k*W + l];
                dst = (unsigned char*)image->imageData + j*image->widthStep + i;
                *ptr*= C;

                *ptr = abs(*ptr);
                if (*ptr > 255)

                {
                    *dst = 255;
                }
                else 
                {
                    *dst = *ptr;
                }
            }
        }
    }
}

}

//sobel水平与垂直边缘检测

void Sobel(IplImage*image, IplImage*image5)
{
unsigned char*dst,*dst1,*dst2;
int width = image->width;
int height = image->height;
int i, j;
int H=3;//模板高
int W=3;//模板宽
int C=1;//模板系数
int CX=1;//中心元素横坐标
int CY=1;//中心元素纵坐标
int Template[9];

for (j = 0;j < height;j++)
{
    for (i = 0;i < width;i++)
    {

        dst1 = (unsigned char*)image->imageData + j*image->widthStep + i;
        dst2 = (unsigned char*)image->imageData + j*image->widthStep + i;

        }
    }

Template[0] = -1;
Template[1] = -2;
Template[2] = -1;
Template[3] = 0;
Template[4] = 0;
Template[5] = 0;
Template[6] = 1;
Template[7] = 2;
Template[8] = 1;

Templat(dst1,H,W,CX,CY,C,Template);

Template[0] = -1;
Template[1] = 0;
Template[2] = 1;
Template[3] = -2;
Template[4] = 0;
Template[5] = 2;
Template[6] = -1;
Template[7] = 0;
Template[8] = 1;

Templat( dst2,H, W, CX, CY, C,Template);

for (j = 0;j < height;j++)
{
    for(i = 0;i < width;i++)
    {
        dst= (unsigned char*)image5->imageData + j*image5->widthStep + i;

        if (*dst1 < *dst2)
        {
            *dst= *dst2;
        }
        else

        {
            *dst = *dst1;
        }

    }
}

}

void main()
{
IplImage*image, *image1,*image2,*image3,*image4,*image5;
image = cvLoadImage("1.jpg", 0);
cvNamedWindow("image");
cvShowImage("image", image);

image1 = cvCreateImage(cvGetSize(image), image->depth, 1);
image2 = cvCreateImage(cvGetSize(image), image->depth, 1);
image3 = cvCreateImage(cvGetSize(image), image->depth, 1);
image4 = cvCreateImage(cvGetSize(image), image->depth, 1);
image5 = cvCreateImage(cvGetSize(image), image->depth, 1);

Zongxiang(image, image1);
Hengxiang(image, image2);
Shuangxiang(image, image3);
Robert(image, image4);
Sobel(image, image5);


//cvNamedWindow("zongxiang");
//cvShowImage("zongxiang", image1);
//cvNamedWindow("hengxiang");
//cvShowImage("hengxiang", image2);
//cvNamedWindow("shuangxiang");
//cvShowImage("shuangxiang", image3);
//cvNamedWindow("Robert");
//cvShowImage("Robert", image4);
cvNamedWindow("Sobel");
cvShowImage("Sobel", image5);


cvWaitKey();

}

  • 写回答

1条回答 默认 最新

  • betterhalf 2016-05-11 08:38
    关注

    高人在哪里,求助啊

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题