当前位置: 首页 > news >正文

ubuntu24.04使用opencv4

  • ubuntu24.04LTS自带opencv4.5
  • 代码实例
//opencv_example.cpp
#include <opencv2/opencv.hpp>
#include <iostream>int main() {// 读取图像cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读取图像!" << std::endl;return -1;}// 显示图像cv::imshow("显示图像", img);cv::waitKey(0); // 等待按键return 0;
}
  • 编译( usr/include/opencv4包含opencv2目录,编译执行导入外面一层目录)
g++ opencv_example.cpp -o opencv_example `pkg-config --cflags --libs opencv4`
  • 执行
opencv_example

link-use sift : https://stackoverflow.com/questions/22722772/how-to-use-sift-in-opencv

安装拓展包

  • link: https://github.com/opencv/opencv_contrib.git
    OpenCV Contrib 是 OpenCV 的一个附加模块库,包含了一些在核心 OpenCV 库中没有的额外功能和算法。它的主要作用和特点包括:

介绍

1. 扩展功能

OpenCV Contrib 提供了一些额外的计算机视觉和图像处理功能,这些功能可能不够成熟或不够通用,无法包含在核心 OpenCV 中。通过使用 Contrib 模块,用户可以访问这些实验性或特定领域的功能。

2. 额外的算法

Contrib 模块中包含了一些特定的算法和工具,例如:

  • xfeatures2d:包含 SIFT、SURF 和其他特征检测和描述子提取算法。
  • text:用于文本检测和识别的工具。
  • tracking:包含多种目标跟踪算法。
  • saliency:用于显著性检测的算法。
  • face:人脸检测和识别的相关功能。

基础

致命陷阱: cv::Mat

  • 只在创建Mat的时候,(row,col),其余(col,row)
  • 如下,创建了一个3*row行,3*col列的图像
    cv::Mat globalImage=cv::Mat::zeros(3*row, 3*col, CV_8UC3);
  • 所有的向量位置,也是(col,row)的形式: 图像(row,col)的位置表示为(col,row);
        ori_corners.push_back((cv::Mat_<double>(3,1) << col-1, 0,1));
  • col代表x,row代表y

cv::Rect

cv::Rect(0, 0, img2.cols, img2.rows) 创建了一个从 (0, 0) 开始,宽度为 img2.cols,高度为 img2.rows 的矩形,通常表示整个图像 img2 的区域。

cv::vec4f

  • 表示2D直线时,前两个表示方向,后两个表示端点;

操作

opencv如何把一个图像的某个菱形区域粘贴到另一个图像上?

在OpenCV中,可以通过以下步骤将一个图像的某个菱形区域粘贴到另一个图像上:

  1. 读取图像:使用 cv::imread 读取源图像和目标图像。
  2. 定义菱形区域:通过指定菱形的中心和大小,计算出菱形区域的四个顶点。
  3. 创建掩膜:使用掩膜来提取源图像中的菱形区域。
  4. 粘贴区域:将提取的菱形区域粘贴到目标图像的指定位置。

以下是一个示例代码,演示如何实现这一过程:

C++ 示例代码

#include <opencv2/opencv.hpp>int main() {// 读取源图像和目标图像cv::Mat sourceImage = cv::imread("source_image.jpg");cv::Mat targetImage = cv::imread("target_image.jpg");// 检查图像是否成功读取if (sourceImage.empty() || targetImage.empty()) {std::cerr << "Could not open or find the images!" << std::endl;return -1;}// 定义菱形区域的中心和大小cv::Point center(100, 100); // 菱形中心int width = 80; // 菱形的宽度int height = 80; // 菱形的高度// 计算菱形的四个顶点std::vector<cv::Point> diamondPoints;diamondPoints.push_back(cv::Point(center.x, center.y - height / 2)); // 上顶点diamondPoints.push_back(cv::Point(center.x + width / 2, center.y)); // 右顶点diamondPoints.push_back(cv::Point(center.x, center.y + height / 2)); // 下顶点diamondPoints.push_back(cv::Point(center.x - width / 2, center.y)); // 左顶点// 创建掩膜cv::Mat mask = cv::Mat::zeros(sourceImage.size(), CV_8UC1);cv::fillConvexPoly(mask, diamondPoints, cv::Scalar(255));// 提取菱形区域cv::Mat diamondRegion;sourceImage.copyTo(diamondRegion, mask);// 定义粘贴位置cv::Point pasteLocation(50, 50); // 在目标图像上的粘贴位置// 将菱形区域粘贴到目标图像上for (int y = 0; y < diamondRegion.rows; y++) {for (int x = 0; x < diamondRegion.cols; x++) {if (mask.at<uchar>(y, x) > 0) { // 检查掩膜targetImage.at<cv::Vec3b>(pasteLocation.y + y, pasteLocation.x + x) = diamondRegion.at<cv::Vec3b>(y, x);}}}// 显示结果cv::imshow("Result", targetImage);cv::waitKey(0);return 0;
}

说明:

  1. 读取图像:使用 cv::imread 读取源图像和目标图像。
  2. 定义菱形区域:通过指定菱形的中心和大小,计算出菱形的四个顶点。
  3. 创建掩膜:使用 cv::fillConvexPoly 创建一个掩膜,填充菱形区域。
  4. 提取菱形区域:使用掩膜从源图像中提取菱形区域。
  5. 粘贴区域:将提取的菱形区域粘贴到目标图像的指定位置。
  6. 显示结果:使用 cv::imshow 显示结果图像。

注意事项:

  • 确保粘贴位置在目标图像的有效范围内,以避免越界访问。
  • 如果源图像和目标图像的大小不同,可能需要调整菱形区域的大小或粘贴位置。

simple multi-band blending

  • link1: https://blog.csdn.net/m0_59023219/article/details/130733220
  • link2:https://blog.csdn.net/qq_46396470/article/details/140087963
#include <opencv2/opencv.hpp>
#include <vector>using namespace cv;// 函数:创建拉普拉斯金字塔
std::vector<Mat> createLaplacianPyramid(const Mat& image, int levels) {std::vector<Mat> pyramid;Mat current = image.clone();for (int i = 0; i < levels; i++) {Mat down;pyrDown(current, down);Mat laplacian = current - downsample(down, current.size());pyramid.push_back(laplacian);current = down;}pyramid.push_back(current); // 最底层return pyramid;
}// 函数:重建图像
Mat reconstructFromPyramid(const std::vector<Mat>& pyramid) {Mat current = pyramid.back();for (int i = pyramid.size() - 2; i >= 0; i--) {current = pyrUp(current) + pyramid[i]; // 使用 pyrUp 进行上采样}return current;
}// 函数:多频带混合
Mat multiBandBlending(const Mat& img1, const Mat& img2, int levels) {// 创建拉普拉斯金字塔std::vector<Mat> laplacian1 = createLaplacianPyramid(img1, levels);std::vector<Mat> laplacian2 = createLaplacianPyramid(img2, levels);// 混合频带std::vector<Mat> blendedPyramid;for (size_t i = 0; i < laplacian1.size(); i++) {Mat blended = (laplacian1[i] + laplacian2[i]) / 2; // 简单的平均混合blendedPyramid.push_back(blended);}// 重建图像return reconstructFromPyramid(blendedPyramid);
}int main() {// 读取图像Mat img1 = imread("image1.jpg");Mat img2 = imread("image2.jpg");if (img1.empty() || img2.empty()) {std::cerr << "无法读取图像!" << std::endl;return -1;}// 确保图像大小相同if (img1.size() != img2.size()) {resize(img2, img2, img1.size());}// 进行多频带混合Mat blended = multiBandBlending(img1, img2, 5);// 显示结果imshow("Blended Image", blended);waitKey(0);return 0;
}

相关文章:

ubuntu24.04使用opencv4

ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...

【项目构建】Gradle入门

本文适用&#xff1a; 不知道什么是项目构建&#xff0c;可以了解下Ant&#xff0c;Maven&#xff0c;Gradle的区别。知道什么是项目构建&#xff0c;了解Ant&#xff0c;Maven&#xff0c;可以看到Gradle是怎么做的。知道什么是项目构建&#xff0c;了解Ant&#xff0c;Maven&…...

Electron -- Electron应用主要核心(二)

Electron 应用主要由以下几个核心组成部分构成&#xff1a; 主进程&#xff08;Main Process&#xff09;&#xff1a; Electron 应用的入口点是主进程&#xff0c;通常是 main.js 文件。它负责管理应用的生命周期&#xff0c;包括创建窗口、处理系统事件和应用更新等。主进程可…...

【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解

前言 &#x1f31f;&#x1f31f;本期讲解关于HTMLCSSJavaScript的基础知识&#xff0c;小编带领大家简单过一遍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 …...

git命令恢复/还原某个文件、删除远程仓库中的文件

有时刚创建的远程仓库&#xff0c;可能无意中把一些没用的文件上传到仓库&#xff0c;本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步&#xff1a;拉取最新代码 git pull 第二步&#xff1a; 查看git 修改的文件状态 git status 第三步&#xff1a;查看…...

二十一、Ingress 进阶实践

架构参考 使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。 一、Ingress Nginx Controller 安装 采用helm的安装方式,进行部署。 官网地址: https://kubernetes.github.io/ingress-nginx/deploy/ github地址: https://github.com/kubernetes/in…...

ES学习Promise对象(九)

这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器&#xff0c;里面保存着某个未来才会结束的事件&#xff08;通常是一个异步操作&#xff09;的结果。Promise 是一个对象&#xff0c;Promise 提供统一…...

寻找适合小户型的开源知识库open source knowledge base之路

寻找一个开源的知识库&#xff0c;为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中&#xff0c;以便更容易查阅&#xff0c;花更少时间收集、对比版本及分享等一系列管理工作&#xff0c;同时确保在需要时可以相对快速找到有用的资料&…...

Linux高级--2.6 网络面试问题

tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程&#xff0c;服务端开放一个IP端口&#xff0c;收到连接后&#xff0c;服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc

在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc &#x1f4d6; 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后&#xff0c;可能会遇到如下问题&#xff1a; node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…...

音视频入门基础:MPEG2-TS专题(20)——ES流简介

《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets&#xff08;PES包&#xff09;中编码的视频、编码的音频或其他编码的比特流。一个ES流&#xff08;elementary stream&#xff09;在具有且只有一个stream_id的PES packets序列中携带&#xff1…...

五子棋小游戏设计(Matlab)

基于Matlab的五子棋小游戏设计 &#xff08;完整源码运行呈现的GUI界面&#xff09; &#xff08;完整的设计说明报告&#xff09; 需要请随时联系博主&#xff0c;博主基本都在线&#xff0c;能秒回&#xff01; 随着计算机技术的发展&#xff0c;将传统棋类游戏与编程技术…...

基于Pycharm与数据库的新闻管理系统(3)MongoDB

pip3 install pymongo 1.连接到MongoDB数据库 文件地址&#xff1a;db/mongo_db.py 从 pymongo 模块中导入 MongoClient 类&#xff1b;创建 MongoClient 的一个实例&#xff0c;该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。 from pymongo import MongoClie…...

WebRtc webrtc-streamer部署

文章目录 本文档只是为了留档方便以后工作运维&#xff0c;或者给同事分享文档内容比较简陋命令也不是特别全&#xff0c;不适合小白观看&#xff0c;如有不懂可以私信&#xff0c;上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...

CVPR-2024 | 具身导航模型大一统!NaviLLM:学习迈向具身导航的通用模型

作者&#xff1a;Duo Zheng, Shijia Huang, Lin Zhao, Yiwu Zhong, Liwei Wang 单位&#xff1a;香港中文大学&#xff0c;上海人工智能实验室&#xff0c;感知与交互智能中心 论文链接&#xff1a;Towards Learning a Generalist Model for Embodied Navigation&#xff08;…...

CAN201 Introduction to Networking(计算机网络)Pt.2 传输层

文章目录 3. Transport Layer&#xff08;传输层&#xff09;3.1 Multiplexing and demultiplexing&#xff08;多路复用和多路分解&#xff09;3.2 Connectionless transport&#xff1a;UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…...

git仓库多人协作新建分支 合并到主分支流程详解

在多人协作的 Git 仓库中&#xff0c;新建分支并最终将其合并到主分支的流程是为了实现团队协作、提高代码的可管理性、确保代码质量&#xff0c;并且避免多人同时修改同一部分代码导致冲突。以下是这个流程的目的和具体步骤。 目录 1. 在 master 上新建一个分支 2. 进行功能…...

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...

【时间之外】IT人求职和创业应知【74】-运维机器人

目录 OpenAI最强推理模型o3发布&#xff0c;AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪&#xff0c;贵知足。 感谢所有打开这个页面的朋友。人生不如意&#xff0c;开越野车去撒野&#xff0c;会害了自己&#xff0c;不如…...

高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容

预览 第1步&#xff1a;理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…...

app启动自启动后无法重启后启动

开启High background power usage 可以就可以了有时候&#xff0c;只是因为手机需要一定的初始化时间&#xff0c;等1分钟就启动了。...

保姆级教程:彻底解决Win11 CH340串口‘无法访问’问题(附2011版驱动下载与防捆绑指南)

终极指南&#xff1a;Win11系统CH340串口驱动兼容性问题的完整解决方案 最近不少开发者反馈在Windows 11系统下使用CH340串口模块时遇到了"无法访问"的问题。这个看似简单的驱动兼容性问题&#xff0c;实际上困扰了许多嵌入式开发者和硬件爱好者。本文将提供一个从问…...

Ostrakon-VL-8B多模态运维监控实战:智能日志分析与故障预警

Ostrakon-VL-8B多模态运维监控实战&#xff1a;智能日志分析与故障预警 最近和几个做运维的朋友聊天&#xff0c;大家普遍都在吐槽一件事&#xff1a;每天上班就像在“看监控”和“查日志”之间来回切换。服务器告警一响&#xff0c;就得一头扎进海量的日志文件里&#xff0c;…...

Ubuntu24.04下Qt6高效安装指南:从镜像加速到依赖解决

1. 准备工作&#xff1a;系统检查与资源规划 在开始安装Qt6之前&#xff0c;我们需要先做好基础准备工作。很多新手容易忽略这个环节&#xff0c;结果安装到一半才发现磁盘空间不足或者系统版本不兼容。我自己就曾经吃过这个亏&#xff0c;当时安装到90%突然报错&#xff0c;排…...

Bilibili API Python客户端深度解析与实战指南

Bilibili API Python客户端深度解析与实战指南 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址&#xff1a;https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-ap…...

可变形卷积(Deformable Convolution)原理与在YOLOv11中的集成

上周在产线测试YOLOv11的缺陷检测模型&#xff0c;遇到个头疼的问题&#xff1a;同一类金属件&#xff0c;因为冲压模具磨损导致边缘出现轻微形变&#xff0c;模型漏检率突然飙升。常规的卷积核是固定网格采样&#xff0c;对这类几何形变缺乏适应性。调了一整天数据增强&#x…...

告别虚拟机!在Windows 11的WSL2里搞定RK3588交叉编译环境(基于gcc-linaro-7.5.0)

在Windows 11的WSL2中高效搭建RK3588交叉编译环境 对于嵌入式开发者来说&#xff0c;为RK3588这样的ARM架构处理器搭建交叉编译环境是日常工作的重要一环。传统方式往往需要在物理机安装Linux系统或使用虚拟机&#xff0c;但这两种方案都存在明显的效率瓶颈。本文将介绍如何利用…...

解锁专业显示控制:ColorControl让NVIDIA显卡和LG电视完美协作

解锁专业显示控制&#xff1a;ColorControl让NVIDIA显卡和LG电视完美协作 【免费下载链接】ColorControl Easily change NVIDIA display settings and/or control LG TVs 项目地址: https://gitcode.com/gh_mirrors/co/ColorControl 你是否曾为Windows系统显示设置的局限…...

Qwen3.5-2B助力Anaconda环境管理:创建专属AI模型运行环境

Qwen3.5-2B助力Anaconda环境管理&#xff1a;创建专属AI模型运行环境 1. 为什么需要独立环境运行AI模型 当你开始接触各种AI模型时&#xff0c;可能会遇到一个常见问题&#xff1a;不同模型对Python包和框架版本的要求各不相同。比如Qwen3.5-2B可能需要PyTorch 2.0&#xff0…...

RPA文件深度解析与高效提取指南:从原理到实战的完整解决方案

RPA文件深度解析与高效提取指南&#xff1a;从原理到实战的完整解决方案 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa 问题定位&#xff1a;RPA文件的技术挑战与解决方案 识别…...