OpenCV 3.2 在 C++Builder 10.1 Berlin 下的安装使用

kingkee 2017-07-10 10:16:30
想借用C++Builder 界面设计的便捷性,结合 OpenCV 3.2来使用,但查了好多资料,还是没能成功。
已经试过的方法:
1、用一些工具转换 OpenCV的库在C++Builder下使用,转投完成后,还是不能使用。
2、使用 C++Builder 编译器重新编译 OpenCV 源码,各种错误,没成功。

向各位大神求教了。
...全文
1216 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-07-13
  • 打赏
  • 举报
回复
引用 26 楼 DelphiGuy 的回复:
BITMAPINFO是自己填充的,根据图像的数据结构,宽度、高度、色深、通道数、图像数据指针等等自己构造,虽然我没有验证,不过估计opencv图像的内存数据结构肯定考虑了和windows bitmap的兼容,后者1、4、8、15/16、24、32位格式都有,基本不存在构造不出来的类型。
也是,图像数据部分,R、G、B还是B、G、R顺序一般都是一致的吧?每像素行图像数据末尾不知道有没有对齐填充,cv结构和BITMAPINFO转换不知道会不会有影响?
  • 打赏
  • 举报
回复
BITMAPINFO是自己填充的,根据图像的数据结构,宽度、高度、色深、通道数、图像数据指针等等自己构造,虽然我没有验证,不过估计opencv图像的内存数据结构肯定考虑了和windows bitmap的兼容,后者1、4、8、15/16、24、32位格式都有,基本不存在构造不出来的类型。
ooolinux 2017-07-13
  • 打赏
  • 举报
回复
引用 24 楼 DelphiGuy 的回复:
我对于opencv也是新手,初步研究,cvLoadImage返回的指针指向图像的数据结构,宽度、高度、色深、通道数、图像数据指针等等,应该可以用StretchDIBits复制出来。
我也没用过OpenCV,好奇怎么把它和Delphi或CB结合起来。 我百度了一下StretchDIBits,需要BITMAPINFO结构,跟cv图像数据结构可能不一定兼容, 不过我想根据色深和图像数据,应该可以得到像素的RGB分量值(如果不是24位不知道怎么办?),转换为TColor赋值给TBitmap的Canvas->Pixels[x][y]。ScanLine应该也可以。
  • 打赏
  • 举报
回复
我对于opencv也是新手,初步研究,cvLoadImage返回的指针指向图像的数据结构,宽度、高度、色深、通道数、图像数据指针等等,应该可以用StretchDIBits复制出来。
kingkee 2017-07-12
  • 打赏
  • 举报
回复
感谢各位! 在 embarcadero 官方网站上看到了产品开发线路图,官方计划在 RAD Studio 10.2 tokyo updat2 支持 CMake,最快今年底吧,到时就方便了。
ooolinux 2017-07-12
  • 打赏
  • 举报
回复
引用 22 楼 DelphiGuy 的回复:
opencv的源码里带了cmake的make文件,但是提供的windows版二进制下载里面的DLLs是用VC++编译的。
如果是标准C++的话,以后用CB编译一般没问题了? OpenCV可以自己创建窗口显示图像,怎么把它运算得到的图像用TImage显示呢?
  • 打赏
  • 举报
回复
opencv的源码里带了cmake的make文件,但是提供的windows版二进制下载里面的DLLs是用VC++编译的。
ooolinux 2017-07-12
  • 打赏
  • 举报
回复
引用 20 楼 kingkee 的回复:
感谢各位! 在 embarcadero 官方网站上看到了产品开发线路图,官方计划在 RAD Studio 10.2 tokyo updat2 支持 CMake,最快今年底吧,到时就方便了。
OpenCV 源码工程文件是什么类型的?意思CMake可以直接编译了?
  • 打赏
  • 举报
回复
不需要.lib,直接声明DLL中的符号就可以。
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
引用 17 楼 DelphiGuy 的回复:
[quote=引用 15 楼 u010165006 的回复:] C++直接使用DLL中函数的话应该是要把动态(导入)lib加入工程一起编译,Delphi不要导入lib怎么定位DLL中函数地址?
C++中动态连接也需要.lib属于多余,这个lib里面没有实质内容,只是指出哪个符号来自哪个DLL,和Delphi中直接声明 function xxx: type; external 'xxx.dll';是一回事,除了更麻烦之外。 [/quote] Delphi对传统C/C++那一套还是有变通的。
  • 打赏
  • 举报
回复
引用 12 楼 wangfp40 的回复:
[quote=引用 11 楼 DelphiGuy 的回复:] 不需要.lib,直接声明DLL中的符号就可以。
大神,来个完整例子呗。。。也想了解OPENCV[/quote] https://sourceforge.net/projects/delphiopencv/
  • 打赏
  • 举报
回复
引用 15 楼 u010165006 的回复:
C++直接使用DLL中函数的话应该是要把动态(导入)lib加入工程一起编译,Delphi不要导入lib怎么定位DLL中函数地址?
C++中动态连接也需要.lib属于多余,这个lib里面没有实质内容,只是指出哪个符号来自哪个DLL,和Delphi中直接声明 function xxx: type; external 'xxx.dll';是一回事,除了更麻烦之外。
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
csdn回帖编辑器总是自动把以前引用的也加进来。
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
不需要.lib,直接声明DLL中的符号就可以。
相当于用LoadLibrary和GetProcAddress函数吗?感觉这样麻烦点。
引用 14 楼 DelphiGuy 的回复:
[quote=引用 13 楼 u010165006 的回复:] [quote=引用 11 楼 DelphiGuy 的回复:] 不需要.lib,直接声明DLL中的符号就可以。
相当于用LoadLibrary和GetProcAddress函数吗?感觉这样麻烦点。[/quote] 不是的,声明一个接口单元(相当于头文件)就可以直接使用。 [/quote] C++直接使用DLL中函数的话应该是要把动态(导入)lib加入工程一起编译,Delphi不要导入lib怎么定位DLL中函数地址?
  • 打赏
  • 举报
回复
引用 13 楼 u010165006 的回复:
[quote=引用 11 楼 DelphiGuy 的回复:] 不需要.lib,直接声明DLL中的符号就可以。
相当于用LoadLibrary和GetProcAddress函数吗?感觉这样麻烦点。[/quote] 不是的,声明一个接口单元(相当于头文件)就可以直接使用。
ooolinux 2017-07-11
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
不需要.lib,直接声明DLL中的符号就可以。
相当于用LoadLibrary和GetProcAddress函数吗?感觉这样麻烦点。
风子啊啊 2017-07-11
  • 打赏
  • 举报
回复
引用 11 楼 DelphiGuy 的回复:
不需要.lib,直接声明DLL中的符号就可以。
大神,来个完整例子呗。。。也想了解OPENCV
ooolinux 2017-07-10
  • 打赏
  • 举报
回复
据说新版本CB,CV库不用转换了,好像DelphiGuy说的。
ooolinux 2017-07-10
  • 打赏
  • 举报
回复
引用 9 楼 DelphiGuy 的回复:
直接用源码肯定是不行的,使用DLLs可以,需要翻译一下头文件,SF上有一个2.4版的Delphi转换。
Delphi使用它的DLL需要动态lib吗,需要转换吗?
  • 打赏
  • 举报
回复
直接用源码肯定是不行的,使用DLLs可以,需要翻译一下头文件,SF上有一个2.4版的Delphi转换。
加载更多回复(7)

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧