在iOS中使用openCV阅读和写入图像时的Mat nil

46qrfjad  于 2023-04-07  发布在  iOS
关注(0)|答案(1)|浏览(177)

读取IOS(objectiv-C)中的映像(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数据

(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)
  }
}
slwdgvem

slwdgvem1#

“但是当我运行cv::Imread();,cv::Mat tiffImage图像保存为nil。”
分配器= nil
opencv read image fail with tiffImage is nil. opencv保存image will definitely fail.
您需要确定图像路径和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);

相关问题