在ios中使用openCV读写图像时为空



在IOS (objective - c)中读取Image (tiff)文件。
保存为NSString*,转换为cv::String

到目前为止,我想要的字符串存储在一个变量中。

NSString* strTiff = call.arguments[@"Tiff"];
NSString* png = call.arguments[@"Path"];
cv::String test1 = [strTiff cStringUsingEncoding:NSUTF8StringEncoding];;
cv::String test2 = [png cStringUsingEncoding:NSUTF8StringEncoding];;

cv::Mat tiffImage = cv::imread(test1);
bool res = cv::imwrite(test2, tiffImage);

但是当我运行cv::Imread();时,cv::Mat tiffImage映像被保存为nil。看看官方文档,似乎没有问题,如何使用它,但为什么是nil返回?

<tiffImage数据/strong>

(cv::Mat) tiffImage = {
flags = 1124007936
dims = 0
rows = 0
cols = 0
data = 0x0000000000000000
datastart = 0x0000000000000000
dataend = 0x0000000000000000
datalimit = 0x0000000000000000
allocator = nil
u = nil
size = {
p = 0x000000016cf41098
}
step = {
p = 0x000000016cf410e0
buf = ([0] = 0, [1] = 0)
}
}

"但是当我运行cv::Imread();, cv::Mat tiffImage图像保存为nil.">
allocator = nil
opencv读取图像失败与tiffImage是nil。Opencv保存图像肯定会失败。
您需要确定图像路径和opencv是否可读。

NSString* readFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"read.png"];
UIImage* image = [[UIImage alloc] initWithContentsOfFile:readFilePath];
NSLog(@"image:%@", image);
cv::String readpath_str = [readFilePath cStringUsingEncoding:NSUTF8StringEncoding];
cv::Mat image_mat = cv::imread(readpath_str);
NSString* saveFilePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"write.png"];
cv::String writepath_str = [saveFilePath cStringUsingEncoding:NSUTF8StringEncoding];
bool res = cv::imwrite(writepath_str, image_mat);
NSLog(@"cm write:%d", res);

已解决

cv::Mat tiffImage = cv::imread(test1);

改变
cv::Mat tiffImage;
UIImageToMat(image, tiffImage, true);

最新更新