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;
}

  

时间: 2024-11-09 21:52:59

opecv获取透明图像轮廓的相关文章

OPENCV图像轮廓检测

前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像轮廓检测. 一.图像轮廓检测 在opencv中,轮廓对应着一系列的点的集合,opencv提供了一个函数,用来获得这些点的集合 API:void finContours(输入图像,输出轮廓点集,输出向量,int 轮廓检索模式,int 轮廓近似方法,Point 轮廓点的可选偏移量) 注:1.输入图像,是

Halcon学习之六:获取Image图像中Region区域的特征参数

area_center_gray ( Regions, Image : : : Area, Row, Column )    计算Image图像中Region区域的面积Area和重心(Row,Column). cooc_feature_image ( Regions, Image : : LdGray, Direction : Energy,Correlation, Homogeneity, Contrast )   计算共生矩阵和推导出灰度特征值 Direction:灰度共生矩阵计算的方向  

WordPress获取特色图像的链接地址

为什么要获取WordPress的特色图像呢? 这主要是因为,我们已经写好了静态模板文件,只有获取WordPress特色图像地址插入进去就可以了,非常方便. 还有就是有的时候,我们需要设置图片的宽度为100%,高度自动.这样通过 the_post_thumbnail() 这个方法就无法实现了. 好了,看下面的方法: 获取特色图像:小 <?php $thumbnail_image_url = wp_get_attachment_image_src( get_post_thumbnail_id($po

任意两张带透明图像的一种形状过渡效果

一直想要一个Flash 那种形状渐变效果,这两天苦思冥想了一番实现了,先看效果. 一开始是往把贴图alpha通道识别成路径,建模想办法拉顶点的方向去,想来想去不是个好办法,后来还是决定直接基于位图实现,尽量采用gpu可以处理的方式. 然后往这边思考后,脑子里就浮现出了ditance field 这个概念,alpha表达的还是颜色,直接插值alpha会呈现出颜色渐变的结果. 而distance field 反映的是离边的远近,插值他就会呈现出每个像素离边的距离的变化. 确定方案后就是实现了. 我采

vc/mfc获取rgb图像数据后动态显示及保存图片的方法

vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw32.lib  链接库 [cpp] view plaincopy //------------------------------设置位图头结构信息---------------------------------------------------------------------- // Setup bm

CSS创建透明图像

CSS 图像透明/不透明 CSS Opacity属性是W3C的CSS3建议的一部分.创建透明图像 - 悬停效果创建一个透明图像CSS3中属性的透明度是 opacity.img{ opacity:0.4; filter:alpha(opacity=40); /* IE8 及其更早版本 */}IE9,Firefox,Chrome,Opera,和Safari浏览器使用透明度属性可以将图像变的不透明. Opacity属性值从0.0 - 1.0.值越小,使得元素更加透明.IE8和早期版本使用滤镜:alph

OpenCV提取图像轮廓总结

OpenCV函数 cvFindContours提取轮廓 :点击打开链接  点击打开链接 点击打开链接 点击打开链接 提取元素的轮廓及形状描述子 点击打开链接 提取轮廓的点坐标 轮廓提取后,它是用关键点组成的,下面提取出这些关键点. 1.先输出所有关键点的个数cout<<"elements"<<contour->total<<endl; 2.for(int i=0;i<contour->total;++i) { CvPoint* p

OpenCV函数cvFindContous提取图像轮廓

Opencv中提供了很多关于图像轮廓处理的函数,这里我用cvFindContours函数来提取轮廓,并用cvDrawContours函数将提取的轮廓画出来.函数cvFindContours的第一个参数就是我们要进行提取轮廓的目标图像,这里要注意,这个图像必须是一个二值图.得到二值图的方法有很多,这里我采用的是cvThreshold函数,通过设置阀值来得到相应的二值图.当然,这里阀值的选择根据不同的图像可以自己适当的调整,这样效果就比较好了!下面是源码: #include<cv.h> #incl

matlab 提取图像轮廓(图像边缘提取)

利用edge()函数提取图像轮廓,绘制出对象的边界和提取边界坐标信息,matlab实现代码如下: close all;clear all;clc; % 提取图像轮廓,提取图像边缘 I = imread('yifu.jpg'); c = im2bw(I,graythresh(I)); figure; subplot(131);imshow(I); c = flipud(c); %实现矩阵c上下翻转 b = edge(c,'canny'); [u,v] = find(b); %返回边界矩阵b中非零元