- 操作系统:ubuntu22.04
- OpenCV版本:OpenCV4.9
- IDE:Visual Studio Code
- 编程语言:C++11
算法描述
计算图像在x和y两个方向上的一阶导数,使用Sobel算子。
等价于调用:
Sobel( src, dx, CV_16SC1, 1, 0, 3 );
Sobel( src, dy, CV_16SC1, 0, 1, 3 );
spatialGradient() 函数主要用于图像处理和计算机视觉领域,通常是在像 OpenCV 或 MATLAB 这样的计算框架中使用。该函数的主要目的是计算图像的空间梯度,这对于边缘检测和特征提取非常重要。
函数原型
void cv::spatialGradient
(
InputArray src,
OutputArray dx,
OutputArray dy,
int ksize = 3,
int borderType = BORDER_DEFAULT
)
参数
- 参数src 原始输入图像。
- 参数dx 输出图像,包含x方向上的一阶导数。
- 参数dy 输出图像,包含y方向上的一阶导数。
- 参数ksize Sobel算子的大小,必须设置为3。
- 参数orderType 边界处理方式,默认为BORDER_DEFAULT,这通常是BORDER_REFLECT_101。BORDER_REPLICATE也是一种支持的边界处理方式。
代码示例
include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
// 加载原始图像
cv::Mat src = cv::imread( "/media/dingxin/data/study/OpenCV/sources/images/erik.jpg", cv::IMREAD_GRAYSCALE );
if ( src.empty() )
{
std::cout << "Could not open or find the image" << std::endl;
return -1;
}
cv::Size sz2Sh( 400, 600 );
cv::resize( src, src, sz2Sh, 0, 0, cv::INTER_LINEAR_EXACT );
// 定义输出图像
cv::Mat dx, dy;
cv::spatialGradient(src, dx, dy);
// 转换回 CV_8U
cv::convertScaleAbs( dx, dx );
cv::convertScaleAbs( dy, dy );
// 显示梯度图像
imshow("origianl image", src);
cv::imshow( "Gradient X", dx );
cv::imshow( "Gradient Y", dy );
cv::waitKey();
return 0;
}