闲鱼网站建设,装修设计网站排行榜,果合gohe网站建设,莱州相亲网站Canny边缘算子
cv::Canny()是OpenCV库中用于执行Canny边缘检测的函数。Canny边缘检测是一种广泛使用的图像处理技术#xff0c;用于检测图像中的边缘。
以下是cv::Canny()函数的一般用法和参数#xff1a;
void cv::Canny(cv::InputArray image, // 输入图像#x…Canny边缘算子
cv::Canny()是OpenCV库中用于执行Canny边缘检测的函数。Canny边缘检测是一种广泛使用的图像处理技术用于检测图像中的边缘。
以下是cv::Canny()函数的一般用法和参数
void cv::Canny(cv::InputArray image, // 输入图像通常是灰度图像cv::OutputArray edges, // 输出的边缘图像double threshold1, // 低阈值double threshold2, // 高阈值int apertureSize 3, // Sobel算子的大小通常为3bool L2gradient false // 是否使用L2范数
);image: 输入图像通常是灰度图像。edges: 输出的边缘图像边缘像素将被标记为白色非边缘像素将被标记为黑色。threshold1和threshold2: 低阈值和高阈值。这两个阈值用于控制边缘检测的灵敏度。通常threshold1设置为较低的值而threshold2设置为较高的值。如果图像梯度幅值高于threshold2则被认为是强边缘。如果图像梯度幅值介于threshold1和threshold2之间且与强边缘相连则被认为是弱边缘。apertureSize: Sobel算子的大小通常为3表示使用3x3的Sobel核进行梯度计算。L2gradient: 是否使用L2范数计算图像梯度默认为false。如果设置为true则使用更精确但计算量更大的L2范数否则使用默认的L1范数。
cv::Canny()函数通过计算图像的梯度并根据阈值将像素分为强边缘和弱边缘最终生成边缘图像。你可以根据具体应用的需求调整阈值和其他参数以获得最佳的边缘检测效果。 以下是一个简单的C示例演示如何使用OpenCV的Canny函数来进行边缘检测
#include opencv2/opencv.hppint main() {// 读取输入图像cv::Mat inputImage cv::imread(input.jpg, cv::IMREAD_GRAYSCALE);if (inputImage.empty()) {std::cerr Error: Could not read the input image. std::endl;return -1;}// 创建输出图像cv::Mat edgeImage;// 设置Canny边缘检测的参数double lowThreshold 50; // 低阈值double highThreshold 150; // 高阈值int apertureSize 3; // Sobel算子的孔径大小bool L2gradient false; // 是否使用L2范数// 应用Canny边缘检测cv::Canny(inputImage, edgeImage, lowThreshold, highThreshold, apertureSize, L2gradient);// 显示原始图像和边缘图像cv::imshow(Original Image, inputImage);cv::imshow(Canny Edge Detection, edgeImage);cv::waitKey(0);return 0;
}使用相机实时canny 算子边缘检测
#include opencv2/opencv.hppcv::Mat inputImage;
cv::Mat edges;int lowThreshold 50;
int maxLowThreshold 200;void updateCanny(int, void*) {cv::Canny(inputImage, edges, lowThreshold, lowThreshold * 3, 3);cv::imshow(Canny Edges, edges);
}int main() {cv::VideoCapture cap(0); // 打开本地相机通常为0if (!cap.isOpened()) {std::cerr Error: Could not open the camera. std::endl;return -1;}cv::namedWindow(Canny Edges, cv::WINDOW_NORMAL);cv::createTrackbar(Low Threshold, Canny Edges, lowThreshold, maxLowThreshold, updateCanny);while (true) {cap inputImage;if (inputImage.empty()) {break;}updateCanny(0, 0);char key cv::waitKey(10);if (key 27) { // 按下ESC键退出循环break;}}cap.release();cv::destroyAllWindows();return 0;
}