用opencv2的C api 给图片画矩形框

2023-11-13

使用opencv-3.4.6, Ubuntu系统。
步骤:

  1. 安装opencv,
    过程可以参考: https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
  2. 编程
    opencv-3.4.6的官方例子都是用c++代码编写的,但是由于项目需要在c代码中调用opencv库,所以这里使用opencv 的c接口。 所有的C api 都可以在opencv 官网教程中查到。如果不知道使用哪个函数,可以在c++ sample中查看c++ 接口,然后根据名字去查找对应的c接口,一般是对应好的。比如,c++中的接口 cv::rectangle( ) 对应的c 接口是 cvRectangle。
    c sample 如下:
//test.c
#include <opencv2/imgcodecs/imgcodecs_c.h>
#include <opencv2/highgui/highgui_c.h>
#include <stdio.h>

int main(int argc, char** argv)
{
	//only support png image
	if ( argc != 2 )
	{
		printf("usage: test <Image_Path>\n");
		return -1;
	}

	CvMat* mat = cvLoadImageM(argv[1], CV_LOAD_IMAGE_COLOR);
	if (!mat) {
		printf("cvLoadImageM error\n");
		return -1;
	}
	cvNamedWindow("image", CV_WINDOW_AUTOSIZE);


	/* CvRect r = cvRect(20, 20, 400, 400); //x,y,w,h */
	/* CvScalar c = cvScalar(255, 255, 0, 0); */
	/* cvRectangleR(mat, r, c, 5, 8, 0); */


	CvPoint p1 = cvPoint(20, 20); //x,y
	CvPoint p2 = cvPoint(420, 420); //x,y
	CvScalar c = cvScalar(255, 255, 0, 0);
	cvRectangle(mat, p1, p2, c, 5, 8, 0);


	cvShowImage ("image", mat);
	cvWaitKey(0);
}

对比着看c++代码:

//displayimage.cpp
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace cv;
int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }
    Mat image;
    image = imread(argv[1], 1);

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    Rect r = Rect(10, 20, 300, 300);
    rectangle(image, r, Scalar(255, 0, 0), 1, 8, 0);
    imshow("Display Image", image);
    waitKey(0);
    return 0;
}

  1. 编译
    使用cmake 来编译, CMakeList.txt如下L:
#CMakeLists.txt
# cmake needs this line
cmake_minimum_required(VERSION 2.8)

#SET(CMAKE_C_COMPILER "/home/public/local/bin/gcc")
#SET(CMAKE_CXX_COMPILER "/usr/bin/g++")


# Define project name
project(displayimage)

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
find_package(OpenCV REQUIRED)

# If the package has been found, several variables will
# be set, you can find the full list with descriptions
# in the OpenCVConfig.cmake file.
# Print some message showing some of them
message(STATUS "OpenCV library status:")
message(STATUS "    version: ${OpenCV_VERSION}")
message(STATUS "    libraries: ${OpenCV_LIBS}")
message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}")

if(CMAKE_VERSION VERSION_LESS "2.8.11")
  # Add OpenCV headers location to your include paths
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

# Declare the executable target built from your sources
add_executable(test test.c)
add_executable(displayimage displayimage.cpp)

# Link your application with OpenCV libraries
target_link_libraries(test ${OpenCV_LIBS})
target_link_libraries(displayimage ${OpenCV_LIBS})

在 CMakeList.txt 所在目录编译:
cmake .
make

  1. 运行
    ./test ./test.png
    可以看到图片被画框:
    在这里插入图片描述
  2. 说明
    实验过程中发现opencv无法加载jpg图片.
    后来发现是因为在安装opencv之后升级过一次libjpeg库,从8升级到9, 但是opencv中的信息没有更新过来.后来重新编译opencv并安装,就可以正常加载jpg图片了.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用opencv2的C api 给图片画矩形框 的相关文章

  • HashMap循环遍历方式及其性能对比

    HashMap循环遍历方式及其性能对比 主要介绍HashMap的四种循环遍历方式 各种方式的性能测试对比 根据HashMap的源码实现分析性能结果 总结结论 1 Map的四种遍历方式 下面只是简单介绍各种遍历示例 以HashMap为例 各自
  • IDEA调试技巧之如何让调试器在特定的地方停下(根据条件调试)

    首先打个断点 在代码的左侧点击即可 右键断点 取消勾选 已启用 然后在条件中填写逻辑表达式 当该逻辑表达式为真时 调试才停下否则继续
  • System.currentTimeMillis()计算方式与时间的单位转换

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 一 时间的单位转换 1秒 1000毫秒 ms 1毫秒 1 1 000秒 s 1秒 1 000 000 微秒 s 1微秒 1 1 000 000秒 s 1秒 1 000 00
  • 黑话管理:偶像

    http blog csdn net shenyisyn article details 4228387 与朋友一起闲聊老提到一个话题 管理者大部分下属都很崇拜 因此成为他们的偶像是很重要 这个观点很大程度上很有道理 作为偶像 往往在精神上
  • 数据结构之线性结构

    上一讲 程序 数据结构 算法 上次介绍了数据结构相关内容理解 这次介绍数据结构另一块内容线性结构理解 线性结构存储形式类似一列火车 这种包含有数组 链表 队列 栈 1 数组 是数据结构中逻辑结构分类其中一种 物理结构 以连续地址存储单元把数
  • U8接口开发

    一 官方接口 OPENAPI 第三方系统部署在外网 互联网 与 U8 对接的场景 限制 做不了上下游关联生单 比如采购入库单无法关联采购到货单 不支持事务 优势 安全 接口定义面向消费者 使用相对最简单 数据标准 json 协议 https
  • oracle enable broken,[20200220]关于SQLNET.EXPIRE_TIME and ENABLE=BROKEN的总结.txt

    20200220 关于SQLNET EXPIRE TIME and ENABLE BROKEN的总结 txt 昨天做了大量关于SQLNET EXPIRE TIME and ENABLE BROKEN的测试 晚上再仔细看 测试做的有点乱 做一
  • 页面发送指令到后端处理控制PLC

    框架ssh 后台 1 后台写一个控制类 control action 控制发送指令 Utils sendMessage toServer m1 给中间件httpserverService 2 control类要在applicationCon
  • 【速卖通代运营】2022跨境电商怎么做?速卖通今年重点要做三件事

    4月19日 一年一度的速卖通的年度峰会在线上举行 面向商家介绍平台全年策略和方向 阿里巴巴集团副总裁 全球速卖通总经理张凯夫表示 2022年速卖通平台将对国内商家有大量利好调整 重点将聚焦于加快提升全球物流履约能力 持续优化平台机制和商家生
  • Call to deprecated function get_sheet_by_name (Use wb[sheetname])

    DeprecationWarning Call to deprecated function get sheet by name Use wb sheetname 原因 新版 python 3 remove sheet 和 get shee
  • Vux使用心得

    参考链接 布局 简单平分 水平布局和垂直布局
  • Qt Creator使用Heob检测内存泄漏

    使用步骤 1 设置Heob路径 Analyze Heob heob64 exe需要自己下载 2 点击 OK 启动测试 程序运行后进行各种常规操作并关闭程序 3 等待Hebo工具分析结果 完成后会出现如下内存泄漏代码定位 可跳转到相应位置进行
  • 如何进行特征工程,以及特征工程的一些理论

    正如一句业界经典的话所说 Garbage in garbage out 对于一个机器学习问题 数据和特征决定了结果的上限 而模型 算法的选择和优化决定了模型的下限 1 什么是特征工程以及其重要性 1 1 特征工程 特征工程 顾名思义 是对原
  • 开源推荐-C++开发的微服务框架Tars

    Tars项目于2017年4月开源 BSD3协议 至今已有5年 在软件层面 社区的版本保持稳定的迭代 支持了多语言微服务的开发和治理 在硬件层面 也移植到Arm生态上 Tars可以帮助开发人员和企业 以微服务的方式快速构建自己稳定可靠的分布式
  • OpenWRT移植EC200A驱动,并实现wifi和lan的上网,及wan和4g的负载均衡(五)

    网卡驱动方式 转载 拨号PPP NDIS RNDIS CDC ECM NCM QMI WWAN GOBINET RMNET MBIM概念介绍 https blog csdn net qlexcel article details 11715
  • nacos添加权限控制的鉴权功能

    nacos如果使用权限控制的鉴权功能 需要在配置文件添加特定参数 我这边是k8s部署的 需要在k8s yaml文件中添加如下参数才能使用权限控制的鉴权功能 name nacos core auth enabled value true 如果

随机推荐

  • android删除文件夹代码,Android_Android递归方式删除某文件夹下的所有文件(.mp3文件等等),1.由于需要删除文件,因此需 - phpStudy...

    Android递归方式删除某文件夹下的所有文件 mp3文件等等 1 由于需要删除文件 因此需要如下权限 2 核心代码 package com example deleteyoumi import java io File import an
  • 性能优化——动画优化笔记

    动画优化 再UWA报告中Animator相关的函数有两个 一个是DirectorUpdateAnimationBegin 一个是DirectorUpdateAnimationEnd 一般来说 我们都要关注这两个函数的堆栈 通过堆栈函数的调用
  • Win10、Win11 增加系统暂停更新时间教程

    在我们日常电脑的使用中 经常会遇到系统弹出系统更新提示 还不想更新系统的用户就会设置暂停更新 但是暂停更新是有时间限制的 在设置中我们可以看得到最多只能暂停 5 周更新 下面是延长暂停时间的教程 基本等于永久关闭更新 1 首先 按键盘上的
  • C++中的封装、继承、多态

    封装 encapsulation 就是将抽象得到的数据和行为 或功能 相结合 形成一个有机的整体 也就是将数据与操作数据的源代码进行有机的结合 形成 类 其中数据和函数都是类的成员 封装的目的是增强安全性和简化编程 使用者不必了解具体的实现
  • 我今年24岁,月入4500,怎么慌成这样?

    之前在某职场大号看到有粉丝留言 不知道为什么 不管怎样努力好像都没什么用 职位没有提升 收入也上不去 和同龄人的差距越来越大 大概是说出了很多人的心声 这条留言的点赞数直飙第一 或许你也曾有过这种疑惑 有的人年纪轻轻 已经是职业精英 有的人
  • Android EditText禁止输入空格和特殊字符

    有时候我们需要限制EditText输入的字符类型 如空格 特殊字符等 这时候我们可以使用系统提供的输入过滤器 InputFilter 具体实现如下 禁止EditText输入空格 param editText public static vo
  • eclipse使用记录

    1 ctrl alt esc取消eclipse置顶 2 https github com java decompiler jd eclipse releases download v2 0 0 jd eclipse 2 0 0 zip ec
  • oracle 11.2.0.4 rac

    oracle 11 2 0 4 rac for rhel 6 8 installation kissweety 于 2017 09 18 09 22 37 发布 3523 收藏 1 分类专栏 ORACLE数据库 文章标签 oracle rh
  • 【Unity 插件】 Shader Editor

    之前因为项目需求要研究如何写Unity的Shader 可是目前国内研究shader语言的可谓凤毛麟角 更别说大神了 没办法 唯有找插件顶住先 几经艰辛地点了不少搜索键后 终于发现了Shader Editor 咋看之下这插件十分复杂 但是用过
  • 2020年最全的自动化测试面试题及答案--看完后吊打面试官!自动化测试是什么?自动化测试学什么?

    一 前言 最近有童鞋和我抱怨 说网上很难搜到那些全面又合适的自动化测试面试题 这里根据我个人的经验以及收集整理的 你没看错 不慌 慢慢来 先从什么是自动化测试开始说起哈 二 什么是自动化测试 什么是自动化测试 当我第一次知道自动化测试的时候
  • QObject::killTimer: timers cannot be stopped from another thread

    QObject killTimer timers cannot be stopped from another thread 产生原因 定时器的事件处理所处的线程和调用定时器操作 方法 的线程不是同一个线程 可以通过 qDebug lt l
  • selenium 实现头条关键字爬取

    from selenium import webdriver 设立米嗯 from selenium webdriver common by import By from selenium webdriver support ui impor
  • linux统计当前目录文件个数

    管道命令的形式是 命令1 命令2 其中命令2是管道命令 管道命令可以是查找字符串的grep命令 也可以是sort这样的排序命令 也可以是wc这样的统计命令 运行ls l会输出当前目录下的文件以及目录的信息 则只要在当前目录的输出结果中统计出
  • 算法训练 大小写转换 JAVA

    算法训练 大小写转换 JAVA 问题描述 编写一个程序 输入一个字符串 长度不超过20 然后把这个字符串内的每一个字符进行大小写变换 即将大写字母变成小写 小写字母变成大写 然后把这个新的字符串输出 输入格式 输入一个字符串 而且这个字符串
  • 开源进展

    WeBASE是一个友好 功能丰富的区块链中间件平台 通过一系列通用功能组件和实用工具 助力社区开发者更快捷地与区块链进行交互 目前WeBASE已更新迭代至v3 1 0版本 本次更新中 WeBASE带来了最新的合约Java脚手架导出功能 完成
  • 富甲一方的MetaRim震撼来袭,是一个结合元宇宙链游的NFT机甲

    MetaRim是一个结合元宇宙链游的NFT机甲 在去年底 知名漫画作家宫崎骏授权了元宇宙项目 MetaRim 并同意 MetaRim 将宫崎骏所创造的十部作品当作素材推出相关 NFT 这也是MetaRim首次为众人所知 扩展场景 机甲Gam
  • 面向对象概述、类与对象内存图、构造方法、构造器、构造方法重载、构造方法作用、this关键字、static

    面向对象编程思想 按照人类正常的思维去编程 面向过程 一 面向对象编程导图 可以把类理解为模板 对象理解为具体的产品 在类外可以通过对象 属性 对象 行为访问属性和行为 在类内直接访问属性和行为 一旦new就在堆汇总给创建了新的对象 对象和
  • MySQL -2 指令

    客户端SQL指令记录 针对 数据库和针对数据表 一 数据库 1 查看当前所有数据库 show databases 2 创建数据库 create database 数据库名 DEFAULT CHARSET utf8 COLLATE utf8
  • 第十二讲-讲为什么我的MySQL会“抖”一下

    为什么我的MySQL会 抖 一下 当内存数据页跟磁盘数据页内容不一致的时候 我们称这个内存页为 脏页 内存数据写入到磁盘后 内存和磁盘上的数据页的内容就一致了 称为 干净页 抖动的时候应该是在刷脏页 第一种场景是 粉板满了 记不下了 这时候
  • 用opencv2的C api 给图片画矩形框

    使用opencv 3 4 6 Ubuntu系统 步骤 安装opencv 过程可以参考 https docs opencv org master d7 d9f tutorial linux install html 编程 opencv 3 4