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算子计算的梯度信息了。
希望能帮到您!