2024-04-28 21:08:16 发布
网友
我有一个应用程序需要检查相机的焦距。为此,我想在单个轴(1D)上的几个预定义位置测量边缘强度(梯度大小)。图像目标将是一个简单的打印输出黑色物体在一段时间的背景。
我在Python中使用OpenCV。我知道OpenCV中有很多边缘检测算法,比如Canny、Sobel、laplace,但这些都是为了过滤图像。我想实际测量边缘的强度。OpenCV中有什么算法可以提供这个功能吗?或者我只是编写自己的算法来测量边缘强度?
您可以计算大小,如下所示:
dx
dy
cv::Sobel
sqrt(dx^2 + dy^2)
cv::magnitude
这是一个计算梯度大小的简单C++代码。您可以轻松地移植到Python,因为只需调用几个OpenCV函数:
#include <opencv2/opencv.hpp> using namespace cv; int main() { //Load image Mat3b img = imread("path_to_image"); //Convert to grayscale Mat1b gray; cvtColor(img, gray, COLOR_BGR2GRAY); //Compute dx and dy derivatives Mat1f dx, dy; Sobel(gray, dx, CV_32F, 1, 0); Sobel(gray, dy, CV_32F, 0, 1); //Compute gradient Mat1f magn; magnitude(dx, dy, magn); //Show gradient imshow("Magnitude", magn); waitKey(); return 0; }
下面是Python版本:
def getGradientMagnitude(im): "Get magnitude of gradient for given image" ddepth = cv2.CV_32F dx = cv2.Sobel(im, ddepth, 1, 0) dy = cv2.Sobel(im, ddepth, 0, 1) dxabs = cv2.convertScaleAbs(dx) dyabs = cv2.convertScaleAbs(dy) mag = cv2.addWeighted(dxabs, 0.5, dyabs, 0.5, 0) return mag mag = getGradientMagnitude(im)
您可以计算大小,如下所示:
dx
和dy
衍生物(使用cv::Sobel
)sqrt(dx^2 + dy^2)
(使用cv::magnitude
)这是一个计算梯度大小的简单C++代码。您可以轻松地移植到Python,因为只需调用几个OpenCV函数:
下面是Python版本:
相关问题 更多 >
编程相关推荐