一、知识要点:
        c调用c++函数
二、背景:
    以前工程使用的是c语言开发且工程比较大,而现在的工程使用的是C++编写的。前者较大,后者较小。虽然说C++能很好的兼容c语言,但是在工程庞大的情况下,将C全部改写成C++也是相当麻烦的,会出现很多很多的无法解析的外部符号。所以最恰当的方法是写一个接口,使得C能调用C++。
例如,很多含有大量算法的工程是使用c编写的,而目前opencv主要是使用C++,opencv中也有含有c版本的函数,但是可能是由于目前windows操作系统相机驱动不支持的原因(未深究),一般情况下无法打开相机。必须使用c++才能打开相机。所以面临语言兼容的问题。
下面是一个c语言调用c++打开相机的小例子,其中:
(1)、Camera.cpp为在c++下对相机和图像进行的操作;
(2)、 libcamera.cpp为c与c++转换的中间层;
(3)、main.c为在c下调用打开相机。
三、代码如下:

(1)、Camera.cpp为在c++下对相机和图像进行的操作;

//camera.cpp
#include<opencv.hpp>using namespace cv;VideoCapture cap;
Mat frame;//打开相机
int OpenCamera(int index)
{cap.open(index);if (cap.isOpened()){return true;}else{return false;}
}//读取图片
IplImage ReadFrame()
{IplImage img;cap >> frame;//img(frame);img = IplImage(frame);return img;
}
(2)、 libcamera.cpp为c与c++转换的中间层;
#include<opencv.hpp>using namespace cv;//  libcamera.cpp
int add(const int a, const int b);int OpenCamera(int index);IplImage ReadFrame();#ifdef __cplusplus
extern "C"
{
#endifint call_cpp_add(const int a, const int b){return add(a, b);}int call_cpp_OpenCamera(int index){return OpenCamera(index);}IplImage call_cpp_ReadFrame(){return ReadFrame();}#ifdef __cplusplus
}
#endif

(3)、 main.c为在c下调用打开相机。

//  main.c
#include <stdio.h>
#include <stdlib.h>
#include<cv.h>
#include<highgui.h>
#include<cxcore.h>int call_cpp_add(const int a, const int b);int call_cpp_OpenCamera(int index);IplImage call_cpp_ReadFrame();int main()
{//printf("%d\n", call_cpp_add(2, 4));IplImage frame;//打开相机if (!call_cpp_OpenCamera(0)){printf("Camera open failed!\n");printf("end------!\n");}else{printf("Camera open success!\n");while (1){frame = call_cpp_ReadFrame();cvShowImage("Img", &frame);cvWaitKey(20);}}getchar();return 0;
}
四、结果

c调用c++:opencv c版本打开相机方法相关推荐

  1. OpenCV学习笔记(六)—— OpenCV for Android打开相机

    在之前的篇章中,我们完成了Android平台开发环境的配置,也找到了剔除OpenCV Manager API的办法,那么接下来我们开始从零开始,完成一个个人的程序,实现功能如下: 1.识别指定的图片, ...

  2. 用opencv使用大恒相机的痛苦经历

    做毕业设计需要用到工业相机,之前的IDS需要还了,心想买个便宜点的(毕竟做完毕设就离开实验室了,太贵不好..),挑了个国产的相机,大恒的DH-HV3151UC 从到货那天开始经历了整整一周的折磨(不过 ...

  3. 安装多个maya版本后,如何指定maya特定版本打开工程?

    一个网友问自己装了多个maya版本,但希望用特定的maya版本 来打开文件,默认双击系统会用后安装的版本打开.解决方法如下: 方法一:进入要打开工程文件目录,按住shift键同时,按鼠标右键,之后在弹 ...

  4. opencv打开相机实时采集与处理

    下面是opencv官方文档中的一个例子, 演示了如何打开相机,获取图片,对图片进行处理 main函数也不需要输入参数,配置好环境直接就可以运行 把处理函数进行修改,就可以实现不同的功能 /* Open ...

  5. python打开摄像头获取图片_Python基于opencv调用摄像头获取个人图片的实现方法

    接触图像领域的应该对于opencv都不会感到陌生,这个应该算是功能十分强劲的一个算法库了,当然了,使用起来也是很方便的,之前使用Windows7的时候出现多该库难以安装成功的情况,现在这个问题就不存在 ...

  6. Qt for Android调用原生接口打开相机拍照并存储照片

    Qt开发Android应用,需求是通过调用Android原生接口去打开系统相机拍照,并返回拍摄的照片.原理很简单,现在Java文件中写android代码调用相机,拍照后将将相片存储在SD卡,然后在C+ ...

  7. Android 调用系统打开相机,打开相册获取图片路径

    我们在开发中经常遇到一些功能需要调取系统相机拍照获取图片,或者有的时候直接打开图库获取图片,那我们怎么获取呢,今天分享下, 第一步,打开相机 public static final int CAMER ...

  8. OpenCV打开相机,调整窗口大小位置

    OpenCV打开相机,调整窗口大小位置 import cv2cap = cv2.VideoCapture(0) cv2.namedWindow('test_cam',cv2.WINDOW_NORMAL ...

  9. android调用相机与相册的方法,Android打开相机和相册实例代码

    本文实例为大家分享了Android打开相机和相册具体代码,供大家参考,具体内容如下 打开相机 /** * 选择相机 */ private void showCamera() { // 跳转到系统照相机 ...

最新文章

  1. 用电脑自带画图工具加字方法
  2. 通俗讲解Pytorch梯度的相关问题:计算图、torch.no_grad、zero_grad、detach和backward;Variable、Parameter和torch.tensor
  3. 人生之精华,胜读十年书
  4. 没学过编程能学python吗_没有编程基础,可以自学Python吗?
  5. 微信非80端口网页授权
  6. 统计分组的原则是要体现什么_什么样的卖场原则更能体现商业设计的价值!
  7. SDL 库 无法解析的外部符号 __imp__fprintf
  8. 利用端口映射解决:拥有公网IP有限,内网需要访问因特网
  9. (2)机器学习_train_test_split
  10. 190416每日一句
  11. 观察数据时易出错的点
  12. 海信电视root后误删软件无法进入主页键解决办法
  13. 思考模式之“5W1H“
  14. matlab liccode,有没有哪位大佬能帮忙解决以下两个错误:liccode=cha
  15. 利用百度API进行淘宝评论关键词提取
  16. 基于ResNet和Transformer的场景文本识别
  17. java统计每个单词单词出现的次数_Java统计英文句子中出现次数最多的单词并计算出现次数的方法...
  18. i9 10900k和i7 9700k的区别大吗
  19. “元宇宙”,究竟离我们有多远?(下)
  20. 中国科学院大学计算机学科评估,中国科学院大学学科评估结果排名(第四次):最新完整版...

热门文章

  1. 嵌入式实验考试后的辛酸苦楚
  2. 文本特征提取——one-hot
  3. Android开发学习总结——搭建最新版本的Android开发环境
  4. 苹果SSL_goto漏洞简介
  5. agc001E BBQ Hard
  6. App Zap的非常货币化策略:付费游戏的应用内购买
  7. 网状网络和加密货币如何消弭乡村宽带的鸿沟?
  8. 墨水屏(电子纸)刷新模式
  9. python安装第三方包_python 怎么安装第三方包
  10. 计算机知识竞赛策划书前言,计算机知识竞赛策划书范文.docx