// Allocate temporary buffers
Size size = src.size();
- Mat_<Vec3s> sobel_3dx(size); // per-channel horizontal derivative
- Mat_<Vec3s> sobel_3dy(size); // per-channel vertical derivative
- Mat_<float> sobel_dx(size); // maximum horizontal derivative
- Mat_<float> sobel_dy(size); // maximum vertical derivative
- Mat_<float> sobel_ag(size); // final gradient orientation (unquantized)
- Mat_<Vec3b> smoothed(size);
+ Mat sobel_3dx; // per-channel horizontal derivative
+ Mat sobel_3dy; // per-channel vertical derivative
+ Mat sobel_dx(size, CV_32F); // maximum horizontal derivative
+ Mat sobel_dy(size, CV_32F); // maximum vertical derivative
+ Mat sobel_ag; // final gradient orientation (unquantized)
+ Mat smoothed;
// Compute horizontal and vertical image derivatives on all color channels separately
static const int KERNEL_SIZE = 7;
for (int i = 0; i < length0; i += 3)
{
// Use the gradient orientation of the channel whose magnitude is largest
- unsigned short mag1 = CV_SQR((unsigned short)ptrx[i]) + CV_SQR((unsigned short)ptry[i]);
- unsigned short mag2 = CV_SQR((unsigned short)ptrx[i + 1]) + CV_SQR((unsigned short)ptry[i + 1]);
- unsigned short mag3 = CV_SQR((unsigned short)ptrx[i + 2]) + CV_SQR((unsigned short)ptry[i + 2]);
+ int mag1 = CV_SQR(ptrx[i]) + CV_SQR(ptry[i]);
+ int mag2 = CV_SQR(ptrx[i + 1]) + CV_SQR(ptry[i + 1]);
+ int mag3 = CV_SQR(ptrx[i + 2]) + CV_SQR(ptry[i + 2]);
if (mag1 >= mag2 && mag1 >= mag3)
{
ptr0x[ind] = ptrx[i];
ptr0y[ind] = ptry[i];
- ptrmg[ind] = mag1;
+ ptrmg[ind] = (float)mag1;
}
else if (mag2 >= mag1 && mag2 >= mag3)
{
ptr0x[ind] = ptrx[i + 1];
ptr0y[ind] = ptry[i + 1];
- ptrmg[ind] = mag2;
+ ptrmg[ind] = (float)mag2;
}
else
{
ptr0x[ind] = ptrx[i + 2];
ptr0y[ind] = ptry[i + 2];
- ptrmg[ind] = mag3;
+ ptrmg[ind] = (float)mag3;
}
++ind;
}