如何利用openCV做灰度图片

将彩色图片变成灰度图片的两种方式:

1.使用openCV

2.使用IOS系统自带的开发库实现

3.实现架构布局(设计模式:策略模式)

第一:使用openCV

1.下载openCV框架:http://opencv.org/

2.导入项目

3.创建渲染灰度图片类:

#import "ImageUtils.h"

//第一步导入OpenCV 头文件

#import <opencv2/opencv.hpp>

#import <opencv2/imgcodecs/ios.h>

//#import <opencv2/imgproc/types_c.h>

//导入命名空间支持,C++或则C语言 也可以之间改一个.m文件为.mm 文件

using namespace cv;//命名空间是为了解决OC不能出现相同命名,而C++语言可以出现相同命名

@implementation ImageUtils

-(UIImage *)imageToGrayImage:(UIImage *)image

{

//image 表示源文件(图片)

//第二步:将IOS的UIImage 转为C++的图片(数据)

Mat mat_image_Ogray;

UIImageToMat(image, mat_image_Ogray);

//第三步:将C++的彩色图片转成灰度图片

//cvtColor:第一个参数是:源图片,第二个参数:是目标图片 第三个参数:转换类似(灰度)

Mat mat_image_dst;

cvtColor(mat_image_Ogray, mat_image_dst, COLOR_RGB2GRAY);

//第四步:将灰度图片--》可显示的图片

cvtColor(mat_image_dst, mat_image_Ogray, COLOR_GRAY2BGR);

//将C++的图片转成ios的UIImage图片

return MatToUIImage(mat_image_Ogray);

}

//系统方法

-(UIImage*)systemImageToGrayImage:(UIImage*)image

{

NSInteger width = image.size.width;

NSInteger height = image.size.height;

//创建颜色空间(开辟一个颜色内存空间)

//图片灰度空间(创建灰度空间)

CGColorSpaceRef colorREF =  CGColorSpaceCreateDeviceGray();

//第二步:颜色空间的上下文(保存图像的数据信息)

//参数一:指向图像的内存地址

//参数二、三:图像的宽、高

//参数四:像素位数(颜色空间,例如;32位像素格式或RGB颜色空间)

//参数五:图片每一行暂用的比特数

//参数六:颜色空间

//参数七:图片是否包含A(透明度)通道(ARGB四个通道)

CGContextRef context =  CGBitmapContextCreate(nil, width, height, 8, 0, colorREF, kCGImageAlphaNone);

//第三步:释放内存

CGColorSpaceRelease(colorREF);

if (context == nil) {

return nil;

}

//第四步:渲染图片(绘制图片)

//参数一:图片空间上下文

//参数二:渲染区域

//参数三:数据源(图片源)(说白了现在是C++内存区域)

CGContextDrawImage(context, CGRectMake(0, 0, width, height), image.CGImage);

//第五步:将绘制的颜色空间转成CGImage(转成图片类型)

CGImageRef  grayIamgeRef = CGBitmapContextCreateImage(context);

//第六步:将C++图片CGIamge转成面向对象的UIIamge(ios程序认识的图片)

UIImage *desImage = [UIImage imageWithCGImage:grayIamgeRef];

//释放内存

CGContextRelease(context);

CGImageRelease(grayIamgeRef);

return desImage;

}

@end

3.架构设计(设计模式:策略模式)

简单策略模式:一个类中相同的方法,可以单独定义,便于扩展,将我们的算法进行分离

第一步定义:策略模式(面向协议开发)

#import <UIKit/UIKit.h>

//策略协议(面向协议开发)

@protocol Strategy <NSObject>

//算法设计

-(UIImage*)imageToGrayImage:(UIImage*)image;

@end

第二步:创建遵守协议的类

(1)系统方法类

import <Foundation/Foundation.h>

#import "Strategy.h"

@interface SystemStrategy : NSObject<Strategy>

@end

.m

导入系统的实现方法

implementation SystemStrategy

//系统自带的方法

-(UIImage*)imageToGrayImage:(UIImage *)image

{}

(2)创建OpenCV策略类

#import <Foundation/Foundation.h>

#import "Strategy.h"

@interface OpenCVStrategy : NSObject<Strategy>

@end

//导入OpenCV

#import <opencv2/opencv.hpp>

#import <opencv2/imgcodecs/ios.h>

//导入命名空间支持,C++或则C语言 也可以之间改一个.m文件为.mm 文件

using namespace cv;//命名空间是为了解决OC不能出现相同命名,而C++语言可以出现相同命名

@implementation OpenCVStrategy

-(UIImage *)imageToGrayImage:(UIImage *)image

{}

//

时间: 2024-12-16 03:44:49

如何利用openCV做灰度图片的相关文章

怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

  分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.bmp", 0 ); 这样图像已经灰度化,然后调用cvThreshold(image, image, 125, 255, CV_THRESH_BINARY); 就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了   // Truncate v

利用opencv中的级联分类器进行人脸检测-opencv学习(1)

OpenCV支持的目标检测的方法是利用样本的Haar特征进行的分类器训练,得到的级联boosted分类器(Cascade Classification).注意,新版本的C++接口除了Haar特征以外也可以使用LBP特征. 先介绍一下相关的结构,级联分类器的计算特征值的基础类FeatureEvaluator,功能包括读操作read.复制clone.获得特征类型getFeatureType,分配图片分配窗口的操作setImage.setWindow,计算有序特征calcOrd,计算绝对特征calcC

利用opencv的hog+svm实现细胞识别分类器

利用opencv的hog+svm实现细胞识别分类器 图像处理中的细胞识别和人脸识别可以这样来类比,图像中的一张张人脸就是一个个细胞. 模式识别的关键在于样本库的选取,识别率也只能在和样本库比较接近的环境下才能保证.主要工作是三部分一是特征提取,二是样本库的训练train,三是目标检测detect. 一.特征提取 特征提取采用的是HOG特征即HOG描述子,该特征在行人检测中效果非常好.而一般人脸识别采用的是haar特征,这在opencv中都有实现,并都给出了相应的分类器,效果都很不错. 首先采集了

iOS OpenCV 图像灰度处理

有时候开发过程中,切图满足不了我们的需求,此时我们需要对图像进行灰度处理,例如QQ头像在线.离线等不同状态等. 可以尝试的解决方案: 第一种:让UI重新切图 第二种:切图不顶用,用代码实现(重新生成带灰度的图片) 首先介绍一下OpenCV,OpenCV的全称是:Open Source Computer Vision Library.OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效--由

用纯CSS做的图片切换

前段时间做了一个用css做的图片切换.  我们先来看下html结构: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" type="text/css" href="css/index.css"/> </he

利用颜色矩阵实现图片效果

在上一篇文章中,我们学习利用色光三原色调整图片颜色的方法.这一篇文章的代码将在上一篇的基础上继续书写.如果你还没读过,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4883422.html 在本篇中,我们继续学习图片颜色的变换方法,利用颜色矩阵将更加细致的调整图片颜色.其实颜色矩阵变换是图片颜色变化的基础原理.在下面我们将详细说一说. 一.基础知识 在用色光三原色来变换图片颜色中,涉及到一个类ColorMatrix,也就是颜色矩阵的意思.而a

【西祠日志】【07】努力努力,找资料,思考,怎么做asp图片上传

[西祠日志][07]努力努力,找资料,思考,怎么做asp图片上传  (2015.07.23周四) 今天忘了带本子,直接写在书上了笔记,晚点还是夹在本子里: 学了这么久的web应用,一直都没时间去做一点,相对复杂点得应用,比如现在要考虑的图片上传,或者是接下来要加强学习的正则表达式.防SQL注入.验证码的实现.图片水印功能等,这的确是应该作为我学习的第二个阶段,做一点相对复杂一点的应用功能,考虑怎样使自己做的网站更加健壮,今天主要是在找asp资料学习图片上传,考虑了下js实现web富文本编辑器,然

Opencv——彩色图像灰度化的三种算法

为了加快处理速度在图像处理算法中,往往需要把彩色图像转换为灰度图像.24为彩色图像每个像素用3个字节表示,每个字节对应着RGB分量的亮度. 当RGB分量值不同时,表现为彩色图像:当RGB分量相同时,变现为灰度图像: 一般来说,转换公式有3中. (1)Gray(i,j)=[R(i,j)+G(i,j)+B(i,j)]/3; (2)Gray(i,j)=0.299*R(i,j)+0.587*G(i,j)+0.144*B(i,j); (3)Gray(i,j)=G(i,j);//从2可以看出G的分量比较大所

如何利用CSS代码使图片和文字在同一行显示且对齐

对于初学css的新手朋友来说,经常会遇到这样一个问题,当文字和图片出现在同一行或者同一个div里面的时候,在浏览器中运行出来的显示效果往往是在不同的行,那么,我们怎么才能利用CSS代码使图片和文字在同一行显示且对齐呢? 对于这种现象,方法有3种: 1.通过添加css的“vertical-align:middle;”: 2.如果图片是背景图片,可以在css中设置背景图片,然后设置文字的padding属性: 3.把文字和图片分别放入不同的div中. 经过多次的测试,上面三种方法都可以让图片和文字在同