获取轮廓

  1. #import <opencv2/opencv.hpp>
  2. #import <opencv2/imgcodecs/ios.h>
  3. #import <opencv2/imgproc/types_c.h>
  4.  
  5. @implementation OpenCVHelper
  6. +(UIImage *)getImageOutLine:(UIImage *)iputimg
  7. {
  8. cv::Mat cvImage;
  9. UIImageToMat(iputimg, cvImage);
  10. cv::Mat gray;
  11. // Convert the image to grayscale;
  12. cv::cvtColor(cvImage, gray, CV_RGBA2GRAY);
  13. // Apply Gaussian filter to remove small edges
  14. cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);
  15. // Calculate edges with Canny
  16. cv::Mat edges;
  17. cv::Canny(gray, edges, 0, 60);
  18. // Fill image with white color
  19. //cvImage.setTo(cv::Scalar(255,255,255,1));
  20. // Change color on edges
  21. // cvImage.setTo(cv::Scalar(0,128,255,255),edges);
  22.  
  23. cv::Mat cvOutImage= cv::Mat::zeros(cvImage.size(), cvImage.type());
  24. cvOutImage.setTo(cv::Scalar(255,255,255,0));
  25. cvOutImage.setTo(cv::Scalar(0,139,139,1),edges);
  26. return MatToUIImage(cvOutImage);
  27.  
  28. }
  29. @end

点阵操作:

  1. -(UIImage *)transparentImage:(UIImage *)image
  2. {
  3.  
  4. // Create a pixel buffer in an easy to use format
  5. CGImageRef imageRef = [image CGImage];
  6. NSUInteger width = CGImageGetWidth(imageRef);
  7. NSUInteger height = CGImageGetHeight(imageRef);
  8. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
  9.  
  10. UInt8 * m_PixelBuf = malloc(sizeof(UInt8) * height * width * 4);
  11.  
  12. NSUInteger bytesPerPixel = 4;
  13. NSUInteger bytesPerRow = bytesPerPixel * width;
  14. NSUInteger bitsPerComponent = 8;
  15. CGContextRef context = CGBitmapContextCreate(m_PixelBuf, width, height,
  16. bitsPerComponent, bytesPerRow, colorSpace,
  17. kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
  18.  
  19. CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
  20. CGContextRelease(context);
  21.  
  22. //alter the alpha
  23. int length = height * width * 4;
  24. for (int i=0; i<length; i+=4)
  25. {
  26. if (m_PixelBuf[i+0] ==255) {
  27. m_PixelBuf[i+0] =0;
  28. m_PixelBuf[i+1] =0;
  29. m_PixelBuf[i+2] =0;
  30. m_PixelBuf[i+3] =0;
  31. }
  32.  
  33. }
  34.  
  35. //create a new image
  36. CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, width, height,
  37. bitsPerComponent, bytesPerRow, colorSpace,
  38. kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
  39.  
  40. CGImageRef newImgRef = CGBitmapContextCreateImage(ctx);
  41. CGColorSpaceRelease(colorSpace);
  42. CGContextRelease(ctx);
  43. free(m_PixelBuf);
  44.  
  45. UIImage *finalImage = [UIImage imageWithCGImage:newImgRef];
  46. CGImageRelease(newImgRef);
  47.  
  48. return finalImage;
  49. }

  

opecv获取图像轮廓的更多相关文章

  1. OpenCV3入门(十)图像轮廓

    1.图像轮廓 1.1图像轮廓与API函数 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形,相对于边缘,轮廓是连续的,边缘并不全部连续.一般地,获取图像轮廓要经过下面几个步骤: 1)     读取 ...

  2. c++ 霍夫变换检测直线

    通常这是一幅边缘图像,比如来自 Canny算子.cv:: Houghlines函数的输出是cV::Vec2f向量,每个元素都是一对代表检测到的直线的浮点数(p,0).在下例中我们首先应用 Canny算 ...

  3. opecv轮廓匹配,可以用于去噪

    一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板. 矩 比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说 ...

  4. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数003·contour,轮廓处理

    <zw版·Halcon-delphi系列原创教程> Halcon分类函数003·contour,轮廓处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...

  5. java利用透明的图片轮廓抠图

    需要处理的图片: 1.png(空白区域为透明) 2.png 处理后的结果图片:result.png 代码如下: import java.awt.Graphics2D; import java.awt. ...

  6. python-opencv在有噪音的情况下提取图像的轮廓

    对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...

  7. 如何使用 OpenCV 打开摄像头获取图像数据?

    OpenCV 如何打开摄像头获取图像数据? 代码运行环境:Qt 5.9.1 msvc2015 32bit OpenCV 3.3.0 #include "include/opencv2/ope ...

  8. findContours 轮廓查找

    物体的轮廓勾勒出了物体的整体形状,物体形状的边界像素一起组合成了轮廓. 灰度图像边界的明显特征是边界两侧灰度级的突变,根据这个特征,使用Sobel.拉普拉斯或Canny之类的边缘检测算子可以有效的检测 ...

  9. Python 图像处理 OpenCV (15):图像轮廓

    前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...

随机推荐

  1. 将plist文件读取成为数组

    NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist&q ...

  2. Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群

    一.环境说明:     操作系统:Centos-6.5_x86_64    keepalived软件安装在node2和node3机器上.     实际安装之前,先关闭keepalived节点(node ...

  3. C#创建文件夹,往里追字符串。

    /// <summary>写文本日志</summary> /// <param name="StrMessage">日志消息</param ...

  4. SpringMVC(一) SpringMVC概述

    SpringMVC为展现层提供的基于MVC设计理念的优秀的WEB框架,是目前主流的MVC框架之一.Spring 3.0之后,超越Struts2成为最优秀的MVC框架. SpringMVC通过一套MVC ...

  5. Swif - 可选型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...

  6. [算法总结]three-way partition

    procedure three-way-partition(A : array of values, mid : value): i ← 0 j ← 0 n ← size of A - 1 while ...

  7. react native AsyncStorage的使用

    如果现在有一个需求,是要把用户的账号密码保存到本地,大家会怎么做的呢?如果在android中,我相信一大部分人会想到SharedPreferences,这是一个以键值对的形式进行存储的.那如果在rea ...

  8. Android端简易蓝牙聊天通讯App(原创)

    欢迎转载,但请注明出处!谢谢.http://www.cnblogs.com/weizhxa/p/5792775.html 最近公司在做一个蓝牙串口通讯的App,有一个固定的蓝牙设备,需要实现手机连接相 ...

  9. IntelliJ IDEA 绝对好用快捷键

    最近根据自己的使用习惯整理了一下在windows下常用的一些快捷键,有些确实非常实用. 常用快捷键  键 作用 备注 Ctrl+F12 显示当前类的所有方法   F2 定位下一个错误位置   Alt ...

  10. lamp

      Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立 的程序,但是因为常被放在一起使用,拥有了越来越高的 ...