opencv-ios开发笔记6 利用canny简单提取轮廓

本文是opencv-ios开发系列的第六篇,主要介绍如何使用OpenCV库在iOS应用中实现Canny算法进行边缘检测,并进一步提取图像的轮廓。通过实例详细讲解了相关代码实现和步骤。
摘要由CSDN通过智能技术生成

//对获取的实时图像进行处理利用protocol的method:
- (void)processImage:(cv::Mat &)src
{
    // NSLog(@"阈值:%i %i,模糊%i ",self.val1,self.val2,self.val3 );
    cv::Mat   canny_output;//临时变量和目标图的定义
    cv::Mat midImage(self.imageview.bounds.size.height, self.imageview.bounds.size.width, CV_8UC1);
    //图像处理
    cvtColor(src,midImage,CV_BGR2GRAY,3);//将图像转化为灰度图
    //GaussianBlur(midImage,midImage,cv::Size(3,3),0,0); //高斯模糊
     blur(midImage, midImage,cv::Size(3,3));
    Canny(midImage, canny_output, 80,255 );//
   
    
    //轮廓提取
    std::vector<std::vector<cv::Point>> contours;
    findContours(canny_output,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
    //轮廓拣选
    
    src.setTo(cv::Scalar(0,255,0,0),canny_output);
    self.imageview.image=MatToUIImage(src);
  
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,您的问题是如何利用 OpenCV-Python 读取 TIF 格式的图像,使用 Canny 边缘检测算法进行裂缝提取利用形态学连接接近裂缝,找出所有连通域,并删除非裂缝噪点区域,最后对每个连通域提取骨架,测量长度和宽度,是吗? 首先,您可以使用 OpenCV-Python 的 `cv2.imread()` 函数读取 TIF 格式的图像。例如,下面的代码片段演示了如何读取名为 `image.tif` 的 TIF 格式图像: ``` python import cv2 img = cv2.imread('image.tif', cv2.IMREAD_GRAYSCALE) ``` 接下来,您可以使用 Canny 边缘检测算法对图像进行边缘检测。例如,下面的代码片段演示了如何使用 Canny 边缘检测算法对图像进行边缘检测: ``` python edges = cv2.Canny(img, 100, 200) ``` 然后,您可以使用形态学连接算法将接近的裂缝连接在一起。例如,下面的代码片段演示了如何使用形态学连接算法将接近的裂缝连接在一起: ``` python kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5)) closed = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) ``` 接下来,您可以使用 OpenCV-Python 的 `cv2.findContours()` 函数找到所有连通域。例如,下面的代码片段演示了如何使用 `cv2.findContours()` 函数找到所有连通域: ``` python contours, hierarchy = cv2.findContours(closed, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) ``` 然后,您可以删除非裂缝噪点区域。例如,下面的代码片段演示了如何删除非裂缝噪点区域: ``` python for cnt in contours: area = cv2.contourArea(cnt) if area < threshold: cv2.drawContours(closed, [cnt], -1, 0, -1) ``` 最后,对于每个连通域,您可以使用 OpenCV-Python 的 `cv2.morphologyEx()` 函数提取其骨架,并测量其长度和宽度。例如,下面的代码片段演示了如何提取骨架并测量长度和宽度: ``` python for cnt in contours: skeleton = cv2.morphologyEx(closed, cv2.MORPH_SKELETON, kernel) length = compute_length(skeleton) width = compute_width(skeleton) ``` 其中,`compute_length()` 和 `compute_width()` 函数分别用于计算骨架的长度和宽度。 希望这些代码片段能够帮助您完成您的项目!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值