opecv获取图像轮廓
获取轮廓
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #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 |
点阵操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | -(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; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2013-01-23 webView加载不信任HTTPS页面