首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 平面设计 > 图形图像 >

opencv 求图像梯度值解决思路

2013-01-11 
opencv 求图像梯度值void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture

opencv 求图像梯度值
void cvSobel( const CvArr* src, CvArr* dst, int xorder, int yorder, int aperture_size=3 );
我现在想要求一幅图片的梯度,上面这个函数把用sobel卷积过的结果图像存在了dst里面,但是我想要的是每个像素梯度的具体数值,怎么通过dst取?
或者opencv还有没有别的直接类似matlab里面[Gx,Gy]=gradient(I);这样的函数得到梯度值?
求助!!不甚感激!!
[解决办法]
你得到的dst不就是算过的包含梯度信息的图像吗,实在不行你就自己写代码来取梯度也行,就几行代码而已
另外,附上我的一份不完整的代码,仅供参考啊
IplImage *pSrc  = cvLoadImage("图片路径",..,..);//参数不说了

int nWidth      = pSrc->width;
int nHeight     = pSrc->height;
int nLineBytes  = pSrc->widthStep;
uchar *uData    = reinterpret_cast<uchar *>(pSrc->imageData);

uchar uNeighbourPixel[8];//对于Sobel算子,计算的是8领域

for(int j = 1; j < nHeight - 1; j++)
    for(int i = 1; i < nWidth - 1; i++)
{
   {
        uNeighbourPixel[0] = uDataY[(j - 1) * nLineBytesY + i - 1];
uNeighbourPixel[1] = uDataY[(j - 1) * nLineBytesY + i];
uNeighbourPixel[2] = uDataY[(j - 1) * nLineBytesY + i + 1];
uNeighbourPixel[3] = uDataY[j * nLineBytesY + i - 1];
uNeighbourPixel[4] = uDataY[j * nLineBytesY + i + 1];
uNeighbourPixel[5] = uDataY[(j + 1) * nLineBytesY + i - 1];
uNeighbourPixel[6] = uDataY[(j + 1) * nLineBytesY + i];
uNeighbourPixel[7] = uDataY[(j + 1) * nLineBytesY + i + 1];

        uData[j * nLineBytes + i] = abs((1 * uNeighbourPixel[0] + 2 * uNeighbourPixel[1] + 1 * uNeighbourPixel[0]) - (1 * uNeighbourPixel[5] + 2 * uNeighbourPixel[6] + 1 * uNeighbourPixel[7]));
   }
}

最终uData数组里保存的就是Sobel算子计算的梯度信息了。
希望能帮到您!

热点排行