盲水印 opencv android,GitHub - dingmandmq/opencvLib: 使用opencv实现对图片明水印、暗水印、信息存储像素、傅里叶转换等...

该博客介绍了如何在iOS应用中利用OpenCV库进行图像处理,包括添加可见水印、去除水印以及通过傅里叶变换在图像中隐藏信息。代码示例展示了从UIImage转换到cv::Mat,使用傅里叶变换添加和移除水印,以及在图像矩阵中存储和提取信息的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

opencvLib

包含opencv的静态库 OpenCVLibz.framework是真机release、 OpenCVLibm.framework是模拟器release、 OpenCVLib.framework是合并真机和模拟器release

使用opencv实现对图片明水印、暗水印、信息存储像素、傅里叶转换等

调用方法

//添加使用傅里叶转换添加的标示

- (void)addVisibleMarkText{

// NSString *imagePath = [NSHomeDirectory() stringByAppendingString:saveimageName];

// UIImage *imagetmp = [UIImage imageWithContentsOfFile:imagePath];

cv::Mat orignMat = [[OpenCVUtil share] cvMatFromUIImage:self.getImage? self.getImage :[UIImage imageNamed:imageName]];//

cv::Mat getMat = [[OpenCVUtil share] addVisibleMarkText:orignMat blindMarkText:@"XXXX" point:cv::Point(45,45) fontSize:0.8 scalar:CV_RGB(255,255,255)];

UIImage *image = [[OpenCVUtil share] UIImageFromCVMat:getMat];

self.imgView.image = image;

}

//去掉使用傅里叶转换添加的标示

- (void)removeVisibleMarkText {

cv::Mat orignMat = [[OpenCVUtil share] cvMatFromUIImage:self.imgView.image];//

cv::Mat getMat = [[OpenCVUtil share] removeVisibleMarkText:orignMat scalar:CV_RGB(255,255,255)];

UIImage *image = [[OpenCVUtil share] UIImageFromCVMat:getMat];

self.imgView.image = image;

}

// 一些信息添加到矩阵后生成的图

- (void)matrixAdd {

//傅里叶打水印

cv::Mat orignMat = [[OpenCVUtil share] cvMatFromUIImage:self.getImage? self.getImage :[UIImage imageNamed:imageName]];//

// [[OpenCVUtil share] transformImageWithText:orignMat blindMarkText:@"Test" point:cv::Point(45,45) fontSize:0.8 scalar:CV_RGB(255,255,255)];

// cv::Mat cvMat = [[OpenCVUtil share] antitransformImage];

UIImage *image = [[OpenCVUtil share] UIImageFromCVMat:orignMat];

//把打水印的图片添加信息

cv::Mat matTmp = [[OpenCVUtil share] addMessageMatrixToOriginalMatRow:orignMat messageDic:@{@"imageMD5":[[OpenCVUtil share] getImageMatrixMD5String:orignMat],@"data":@"data"}];

self.imgView.image = [[OpenCVUtil share] UIImageFromCVMat:matTmp];

NSString *imagePath = [NSHomeDirectory() stringByAppendingString:saveimageName];

//把图片直接保存到指定的路径(同时应该把图片的路径imagePath存起来,下次就可以直接用来取)

[UIImagePNGRepresentation(self.imgView.image) writeToFile:imagePath atomically:YES];

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"添加完成" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

[alertView show];

}

从矩阵去掉信息后还原的图

- (void)matrixRemove {

//从保存的打水印并添加信息的图片获取信息并对比

NSString *imagePath = [NSHomeDirectory() stringByAppendingString:saveimageName];

UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

// UIImage *image = [UIImage imageNamed:imageName];

cv::Mat orignMat = [[OpenCVUtil share] cvMatFromUIImage:image];

[[OpenCVUtil share] removeMessageMatrixToOriginalMatRow:orignMat getRestoreData:^(NSDictionary *dataDic, cv::Mat restoreMat) {

NSLog(@"%@",dataDic);

UIImage *image = [[OpenCVUtil share] UIImageFromCVMat:restoreMat];

self.imgView.image = image;

if ([dataDic[@"imageMD5"] isEqualToString:[[OpenCVUtil share] getImageMatrixMD5String:restoreMat]]) {

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"对比success" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];

[alertView show];

}

}];

}

核心代码

+ (instancetype)share;

/**

*

* MatFromUIImage

*

* @param image 传入图片

*

*/

-(cv::Mat)cvMatFromUIImage:(UIImage *)image;

/**

*

* UIImageFromCVMat

*

* @param cvMat 传入图片Mat

*

*/

-(UIImage *)UIImageFromCVMat:(cv::Mat)cvMat;

/**

*

* 傅里叶dft转换添加水印Text到频域

*

* @param image 传入图片Mat

* @param blindMarkText 水印文字

* @param point 文字位置

* @param fontSize 文字大小

* @param scalar 颜色

*

*/

- (void)transformImageWithText:(cv::Mat) image blindMarkText:(NSString *) blindMarkText point:(cv::Point) point fontSize:(double)fontSize scalar:(cv::Scalar) scalar ;

/**

*

* 傅里叶dft转换显示频域

*

* @param image 传入图片Mat

*

*/

- (cv::Mat)transformImage:(cv::Mat)image;

/**

*

* 傅里叶idft逆转换显示图片

*

*/

- (cv::Mat)antitransformImage;

/**

* 为加快傅里叶变换的速度,对要处理的图片尺寸进行优化

*

* @param image

* the {@link Mat} to optimize

* @return the image whose dimensions have been optimized

*/

- (cv::Mat)optimizeImageDim:(cv::Mat)image;

/**

*

* 创建优化量级

*

* @param complexImage 传入图片Mat

*

*/

- (cv::Mat)createOptimizedMagnitude:(cv::Mat)complexImage;

/**

*

* 转换DFT

*

* @param image 传入图片Mat

*

*/

- (void)shiftDFT:(cv::Mat)image;

- (cv::Mat)extractImage;

/**

*

* 添加明水印

*

* @param image 传入图片Mat

* @param blindMarkText 水印文字

* @param point 文字位置

* @param fontSize 文字大小

* @param scalar 颜色

*

*/

- (cv::Mat)addVisibleMarkText:(cv::Mat) image blindMarkText:(NSString *) blindMarkText point:(cv::Point) point fontSize:(double)fontSize scalar:(cv::Scalar) scalar;

/**

*

* 删除明水印

*

* @param image 传入图片Mat

* @param blindMarkText 水印文字

* @param point 文字位置

* @param fontSize 文字大小

* @param scalar 颜色

*

*/

- (cv::Mat)removeVisibleMarkText:(cv::Mat) image scalar:(cv::Scalar) scalar ;

/**

*

* 添加Message到图像矩阵

*

* @param oriMat 传入图片Mat

* @param dataDic 传入的dataDic

*

*/

- (cv::Mat)addMessageMatrixToOriginalMatRow:(cv::Mat) oriMat messageDic:(NSDictionary *)dataDic;

/**

*

* 删除图像中添加的Message矩阵

*

* @param oriMat 传入图片Mat

* @response dataDic 返回的信息

* @response restoreMat 返回的Mat

*

*/

- (void)removeMessageMatrixToOriginalMatRow:(cv::Mat)oriMat getRestoreData:(void(^)(NSDictionary *dataDic,cv::Mat restoreMat))successBlock ;

/**

*

* 对图片base64+Md5String

*

* @param img 图片

*

*/

-(NSString *)base64ToMd5WithImage:(UIImage *)img path:(NSString *)path ;

/**

*

* MD5加密

*

* @param mdStr 未加密的String

*

*/

- (NSString *)MD5:(NSString *)mdStr;

/**

*

* dictionary转换成JsonString

*

* @param infoDict dictionary

*

*/

- (NSString*)convertToJSONData:(id)infoDict;

/**

*

* JsonString转换为dictionary

*

*/

- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString;

- (NSString *)getImageMatrixMD5String:(cv::Mat)mat ;

/**

*

* 原生添加水印文字

*

* @param img 图片

*

*/

- (UIImage *)addimageWithTitle:(NSString *)title fontSize:(CGFloat)fontSize image:(UIImage *)image rectX:(CGFloat )rectX rectY:(CGFloat )rectY;

/**

*

* 宽高比压缩

*

* @param img 图片

*

*/

- (UIImage *)imageWithImage:(UIImage*)image

scaledToSize:(CGSize)newSize;

/**

*

* 全部处理过后的Image

*

* @param img 图片

*

*/

- (UIImage *)getProcessedFinalImageWithoriginalImage:(UIImage *)originalImg note:(NSString *)noteStr address:(NSString *)addressStr fillData:(NSDictionary *)messageDic;

-(void)savephotoToDocumentFileImage:(UIImage *)image;

-(UIImage *)getphotoFromDocumentFile;

-(void)deleteDocumentFile;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值