opecv获取图像轮廓
获取轮廓
- #import <opencv2/opencv.hpp>
- #import <opencv2/imgcodecs/ios.h>
- #import <opencv2/imgproc/types_c.h>
- @implementation OpenCVHelper
- +(UIImage *)getImageOutLine:(UIImage *)iputimg
- {
- cv::Mat cvImage;
- UIImageToMat(iputimg, cvImage);
- cv::Mat gray;
- // Convert the image to grayscale;
- cv::cvtColor(cvImage, gray, CV_RGBA2GRAY);
- // Apply Gaussian filter to remove small edges
- cv::GaussianBlur(gray, gray, cv::Size(5,5), 1.2,1.2);
- // Calculate edges with Canny
- cv::Mat edges;
- cv::Canny(gray, edges, 0, 60);
- // Fill image with white color
- //cvImage.setTo(cv::Scalar(255,255,255,1));
- // Change color on edges
- // cvImage.setTo(cv::Scalar(0,128,255,255),edges);
- cv::Mat cvOutImage= cv::Mat::zeros(cvImage.size(), cvImage.type());
- cvOutImage.setTo(cv::Scalar(255,255,255,0));
- cvOutImage.setTo(cv::Scalar(0,139,139,1),edges);
- return MatToUIImage(cvOutImage);
- }
- @end
点阵操作:
- -(UIImage *)transparentImage:(UIImage *)image
- {
- // Create a pixel buffer in an easy to use format
- CGImageRef imageRef = [image CGImage];
- NSUInteger width = CGImageGetWidth(imageRef);
- NSUInteger height = CGImageGetHeight(imageRef);
- CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
- UInt8 * m_PixelBuf = malloc(sizeof(UInt8) * height * width * 4);
- NSUInteger bytesPerPixel = 4;
- NSUInteger bytesPerRow = bytesPerPixel * width;
- NSUInteger bitsPerComponent = 8;
- CGContextRef context = CGBitmapContextCreate(m_PixelBuf, width, height,
- bitsPerComponent, bytesPerRow, colorSpace,
- kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
- CGContextDrawImage(context, CGRectMake(0, 0, width, height), imageRef);
- CGContextRelease(context);
- //alter the alpha
- int length = height * width * 4;
- for (int i=0; i<length; i+=4)
- {
- if (m_PixelBuf[i+0] ==255) {
- m_PixelBuf[i+0] =0;
- m_PixelBuf[i+1] =0;
- m_PixelBuf[i+2] =0;
- m_PixelBuf[i+3] =0;
- }
- }
- //create a new image
- CGContextRef ctx = CGBitmapContextCreate(m_PixelBuf, width, height,
- bitsPerComponent, bytesPerRow, colorSpace,
- kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
- CGImageRef newImgRef = CGBitmapContextCreateImage(ctx);
- CGColorSpaceRelease(colorSpace);
- CGContextRelease(ctx);
- free(m_PixelBuf);
- UIImage *finalImage = [UIImage imageWithCGImage:newImgRef];
- CGImageRelease(newImgRef);
- return finalImage;
- }
opecv获取图像轮廓的更多相关文章
- OpenCV3入门(十)图像轮廓
1.图像轮廓 1.1图像轮廓与API函数 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形,相对于边缘,轮廓是连续的,边缘并不全部连续.一般地,获取图像轮廓要经过下面几个步骤: 1) 读取 ...
- c++ 霍夫变换检测直线
通常这是一幅边缘图像,比如来自 Canny算子.cv:: Houghlines函数的输出是cV::Vec2f向量,每个元素都是一对代表检测到的直线的浮点数(p,0).在下例中我们首先应用 Canny算 ...
- opecv轮廓匹配,可以用于去噪
一个跟轮廓相关的最常用到的功能是匹配两个轮廓.如果有两个轮廓,如何比较它们;或者如何比较一个轮廓和另一个抽象模板. 矩 比较两个轮廓最简洁的方式是比较他们的轮廓矩.这里先简短介绍一个矩的含义.简单的说 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数003·contour,轮廓处理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数003·contour,轮廓处理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替 ...
- java利用透明的图片轮廓抠图
需要处理的图片: 1.png(空白区域为透明) 2.png 处理后的结果图片:result.png 代码如下: import java.awt.Graphics2D; import java.awt. ...
- python-opencv在有噪音的情况下提取图像的轮廓
对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...
- 如何使用 OpenCV 打开摄像头获取图像数据?
OpenCV 如何打开摄像头获取图像数据? 代码运行环境:Qt 5.9.1 msvc2015 32bit OpenCV 3.3.0 #include "include/opencv2/ope ...
- findContours 轮廓查找
物体的轮廓勾勒出了物体的整体形状,物体形状的边界像素一起组合成了轮廓. 灰度图像边界的明显特征是边界两侧灰度级的突变,根据这个特征,使用Sobel.拉普拉斯或Canny之类的边缘检测算子可以有效的检测 ...
- Python 图像处理 OpenCV (15):图像轮廓
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
随机推荐
- 将plist文件读取成为数组
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"city" ofType:@"plist&q ...
- Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群
一.环境说明: 操作系统:Centos-6.5_x86_64 keepalived软件安装在node2和node3机器上. 实际安装之前,先关闭keepalived节点(node ...
- C#创建文件夹,往里追字符串。
/// <summary>写文本日志</summary> /// <param name="StrMessage">日志消息</param ...
- SpringMVC(一) SpringMVC概述
SpringMVC为展现层提供的基于MVC设计理念的优秀的WEB框架,是目前主流的MVC框架之一.Spring 3.0之后,超越Struts2成为最优秀的MVC框架. SpringMVC通过一套MVC ...
- Swif - 可选型
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...
- [算法总结]three-way partition
procedure three-way-partition(A : array of values, mid : value): i ← 0 j ← 0 n ← size of A - 1 while ...
- react native AsyncStorage的使用
如果现在有一个需求,是要把用户的账号密码保存到本地,大家会怎么做的呢?如果在android中,我相信一大部分人会想到SharedPreferences,这是一个以键值对的形式进行存储的.那如果在rea ...
- Android端简易蓝牙聊天通讯App(原创)
欢迎转载,但请注明出处!谢谢.http://www.cnblogs.com/weizhxa/p/5792775.html 最近公司在做一个蓝牙串口通讯的App,有一个固定的蓝牙设备,需要实现手机连接相 ...
- IntelliJ IDEA 绝对好用快捷键
最近根据自己的使用习惯整理了一下在windows下常用的一些快捷键,有些确实非常实用. 常用快捷键 键 作用 备注 Ctrl+F12 显示当前类的所有方法 F2 定位下一个错误位置 Alt ...
- lamp
Linux+Apache+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立 的程序,但是因为常被放在一起使用,拥有了越来越高的 ...