当phoenix 编译器框架iOS应用在真实设备OpenCV框架错误问题,怎么解决

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1480)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'iOS调用opencv 开启摄像头',
blogAbstract:'上一篇写的是iOS调用opencv框架,单纯的调用展示一张图片,深入到opencv框架中调用系统摄像头时时检测当前镜头展示的内容,这是要引入头文件#import &opencv2/highgui/cap_ios.h&&#import ',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:4,
publishTime:3,
permalink:'blog/static/',
commentCount:3,
mainCommentCount:3,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}聚合国内IT技术精华文章,分享IT技术精华,帮助IT从业人士成长
>> 技术文章 >> 正文
Xcode 4.6.3+OpenCV开发iOS应用
浏览: 14127 次
最近在thinkpad T530上安装了VMware Workstation 9,在里面安装了Mac OS X 10.7.5 ,于是装Xcode开始了iOS开发。不是在苹果的硬件上安装的Mac OS X,所以在一个cocoa论坛上发帖被喷,这篇文章作为忏悔,既然用的是黑苹果,那就为世界作点贡献,把我遇到问题的解决方案共享出来。
首先是OpenCV配置,直接从OpenCV官方网站上可以下载到iOS版的OpenCV,我是照着github上的一个开源项目来配置的,地址是:
其中我进行处理的过程中总是出现错误,在stackoverflow上找到了答案,原来是因为iOS里面的图像通过一个函数转换到OpenCV上面格式和OpenCV的格式不同,报错如下:
OpenCV Error: Assertion failed ((src.type() == CV_8UC1 || src.type() == CV_8UC3) && src.type() == dst.type() && src.size() == dst.size() && src.data != dst.data) in bilateralFilter_8u, file /Users/alexandershishkov/dev/opencv/opencv-2.4/modules/imgproc/src/smooth.cpp, line 1874
libc++abi.dylib: terminate called throwing an exception
这个错误找了好久才找到真正原因,原来从UIImage里面导入的是CV_8UC4格式的,将它转换成CV_8UC3就好了,转换代码如下:
cv::cvtColor(colorImg, colorImg, CV_RGBA2RGB, 3);
其次是如何在iOS程序里面配置分享到Twitter和Facebook,我是参考了一个网页上的方法实现的,地址是:
本页关键字几个opencv 的iOS的编译问题解决
时间: 19:47:42
&&&& 阅读:248
&&&& 评论:
&&&& 收藏:0
标签:一个iOS项目需要用到opencv,而且要支持arm64的,以前有个demo的,只支持32位的。到官网下载了最新支持64位库,结果编译无法通过。
google了好久也没法解决,后来问了一个同事,找出原因。64位做了一些改动了。需要重新加一些头文件。
包含错误搞定了,其它问题又来了,c++编译库和另外的一个工程冲突。只能修改了,慢慢一个一个排除问题。
终于搞定了。
总结几点:
1、根据错误提示,定位具体问题位置,通过相关lipo -info 查找引用库支持的版本
2、不要去怀疑官方版的问题,那是浪费时间
3、想好了再试可以节约很多时间。
三思而后行。标签:
&&国之画&&&& &&&&chrome插件&&
版权所有 京ICP备号-2
迷上了代码!ios各种生成opencv.framwork - CSDN博客
ios各种生成opencv.framwork
一 单纯编译opencv,生成opencv2.framework
1.直接在根目录下输入命令
python platforms/ios/build_framework.py platforms/ios/
二 编译opencv+contrib
1.下载contrib源码(注意与opencv版本一致,否则可能会有编译错误)
2.python platforms/ios/build_framework.py –contrib [contrib_dir] platforms/ios/
contrib_dir即为所在的contrib源码目录
三 自定义生成的库名,如希望生成库名为opencv3.framework
1.修改platform/ios/build_framework.py中,将所有opencv2改成opencv3
2.在根目录中,查找所有包含opencv2的关键字并替换成opencv3:
sed -i.bak “s/opencv2/opencv3/g” grep opencv2 -rl ./
注:在macos上,-i后要加.bak,从而可以生成相应的备份文件,最后可以用命令统一删除:
find ./ -name ‘*.bak’ -type f -delete
3.查找所有名为opencv2的目录,并修改成opencv3:
find ./ -name ‘opencv2’ -type d
4.修改完成后就可以编译了
python platforms/ios/build_framework.py platforms/ios/
四 更改opencv域名
有时候可能在一个工程里包含多个版本的opencv,为了避免不同版本的opencv之间的相会干扰,最方便的解决方法是在编译opencv时更改域名,opencv的函数默认都是在域名cv下定义的,因此直接修改cv域名为其他名字便可避免多个版本的冲突。可用sed等命令批量更改。
最后生成的.framework就在ios目录下
本文已收录于以下专栏:
相关文章推荐
这篇文章是在史上最完整的iOS DIY framework 详细教程(一)的基础上加以修改
1、新建一个静态库工程:
2:取自己喜欢的名字:
3、删除向导...
如果播放较大的音频或者要对音频有精确的控制则System Sound Service可能就很难满足实际需求了,通常这种情况会选择使用AVFoundation.framework中的AVAudioPla...
Xcode下可以制作.a也可以制作Framwork,.a再svn中容易忽略掉,给团体配合带来麻烦,整理一下制作Framwork的方法,一定要亲自试一下。
1. 新建一个项目,选择cocoa touc...
关于xcode7生成的framework静态库文件,模拟器和真机framwork如何合并前置部分条件
在 edit Scheme 中,选中run - Build Configuration - r...
使用数据库元数据为Entity Framwork实体生成注释
众所周知Entity Framwork自动生成的实体上没有注释。
没错,我使用的是Entity Framwork的各种应用...
python - 通过Robot Framwork结果xml 生产自定义报告
1.1 安装pyH
1.2 安装lxml
2. 生成html 文...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)iOS & OpenCV 错误: 断言失败在 PhaseCorrelateRes
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
我想检测在 iOS 中使用 OpenCV 2 图像之间的转变。我使用的函数是 phaseCorrelate,应该返回给 2 Point2d cv::Mat 图像。跟随了示例代码通过转换 UIImage 垫,然后转换为 Mat 到 CV_32F 类型。但我在不断地让此错误:
OpenCV Error: Assertion failed (src1.type() == CV_32FC1 || src1.type() == CV_64FC1) in
phaseCorrelateRes, file /Users/alexandershishkov/dev/opencvIOS/opencv-2.4.7/modules/imgproc/src/phasecorr.cpp, line 498
libc++abi.dylib: terminating with uncaught exception of type cv::Exception: /Users/alexandershishkov/dev/opencvIOS/opencv-2.4.7/modules/imgproc/src/phasecorr.cpp:498: error: (-215) src1.type() == CV_32FC1 || src1.type() == CV_64FC1 in function phaseCorrelateRes
我不明白为什么我有此错误,因为我都转换垫式到 CV_32F 。FYI: 为什么不将转换为 CV_64F 的原因是因为它成本巨大内存和在 iOS 应用程序将立即封闭重内存。
这里是代码的我 (在 phaseCorrelate 调用) 出现错误代码段:
#ifdef __cplusplus
-(void)alignImages:(NSMutableArray *)camImages
Mat matImages, refMatImage,
Point2d pcP
for (i = 0; i & [camImages count]; i++) {
if(i == 0){
UIImageToMat([camImages objectAtIndex:i], refMatImage);
refMatImage.convertTo(refMatImage, CV_32F);
createHanningWindow(hann, refMatImage.size(), CV_32F);
UIImageToMat([camImages objectAtIndex:i], matImages);
matImages.convertTo(matImages, CV_32F);
pcPoint = phaseCorrelate(refMatImage, matImages, hann);
NSLog(@"phase correlation points: (%f,%f)",pcPoint.x, pcPoint.y);
NSLog(@"Done Converting!");
解决方法 1:
别管,这实际上被引起 UIImage 放在第一位有 3 个通道的事实。当转换成垫和为 CV_32F 类型,由此产生的垫实际上是 CV_32FC3 类型的 (3 个频道) ;因此,该参数的类型不匹配,将出现错误。
我的解决方案是只到到数组中的频道,然后通过一个渠道拆分原始垫 phaseCorrelate 函数:
vector&Mat& refC
split(refMatImage, refChannels);
phaseCorrelate(refChannels[0],...);}

我要回帖

更多关于 cmake 编译qt框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信