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中,可以通过以下步骤将一个图像的某个菱形区域粘贴到另一个图像上:
- 读取图像:使用
cv::imread读取源图像和目标图像。 - 定义菱形区域:通过指定菱形的中心和大小,计算出菱形区域的四个顶点。
- 创建掩膜:使用掩膜来提取源图像中的菱形区域。
- 粘贴区域:将提取的菱形区域粘贴到目标图像的指定位置。
以下是一个示例代码,演示如何实现这一过程:
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;
}
说明:
- 读取图像:使用
cv::imread读取源图像和目标图像。 - 定义菱形区域:通过指定菱形的中心和大小,计算出菱形的四个顶点。
- 创建掩膜:使用
cv::fillConvexPoly创建一个掩膜,填充菱形区域。 - 提取菱形区域:使用掩膜从源图像中提取菱形区域。
- 粘贴区域:将提取的菱形区域粘贴到目标图像的指定位置。
- 显示结果:使用
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入门
本文适用: 不知道什么是项目构建,可以了解下Ant,Maven,Gradle的区别。知道什么是项目构建,了解Ant,Maven,可以看到Gradle是怎么做的。知道什么是项目构建,了解Ant,Maven&…...
Electron -- Electron应用主要核心(二)
Electron 应用主要由以下几个核心组成部分构成: 主进程(Main Process): Electron 应用的入口点是主进程,通常是 main.js 文件。它负责管理应用的生命周期,包括创建窗口、处理系统事件和应用更新等。主进程可…...
【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …...
git命令恢复/还原某个文件、删除远程仓库中的文件
有时刚创建的远程仓库,可能无意中把一些没用的文件上传到仓库,本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步:拉取最新代码 git pull 第二步: 查看git 修改的文件状态 git status 第三步:查看…...
二十一、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() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…...
寻找适合小户型的开源知识库open source knowledge base之路
寻找一个开源的知识库,为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中,以便更容易查阅,花更少时间收集、对比版本及分享等一系列管理工作,同时确保在需要时可以相对快速找到有用的资料&…...
Linux高级--2.6 网络面试问题
tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc 📖 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后,可能会遇到如下问题: 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(PES包)中编码的视频、编码的音频或其他编码的比特流。一个ES流(elementary stream)在具有且只有一个stream_id的PES packets序列中携带࿱…...
五子棋小游戏设计(Matlab)
基于Matlab的五子棋小游戏设计 (完整源码运行呈现的GUI界面) (完整的设计说明报告) 需要请随时联系博主,博主基本都在线,能秒回! 随着计算机技术的发展,将传统棋类游戏与编程技术…...
基于Pycharm与数据库的新闻管理系统(3)MongoDB
pip3 install pymongo 1.连接到MongoDB数据库 文件地址:db/mongo_db.py 从 pymongo 模块中导入 MongoClient 类;创建 MongoClient 的一个实例,该实例尝试使用提供的MongoDB连接字符串连接到MongoDB服务器。 from pymongo import MongoClie…...
WebRtc webrtc-streamer部署
文章目录 本文档只是为了留档方便以后工作运维,或者给同事分享文档内容比较简陋命令也不是特别全,不适合小白观看,如有不懂可以私信,上班期间都是在得 WebRtc webrtc-streamer 部署 docker run -p 8000:8000 -it mpromonet/webrt…...
CVPR-2024 | 具身导航模型大一统!NaviLLM:学习迈向具身导航的通用模型
作者:Duo Zheng, Shijia Huang, Lin Zhao, Yiwu Zhong, Liwei Wang 单位:香港中文大学,上海人工智能实验室,感知与交互智能中心 论文链接:Towards Learning a Generalist Model for Embodied Navigation(…...
CAN201 Introduction to Networking(计算机网络)Pt.2 传输层
文章目录 3. Transport Layer(传输层)3.1 Multiplexing and demultiplexing(多路复用和多路分解)3.2 Connectionless transport:UDP3.3 Principles of reliable data transfer3.4 Pipelined communication3.5 TCP: con…...
git仓库多人协作新建分支 合并到主分支流程详解
在多人协作的 Git 仓库中,新建分支并最终将其合并到主分支的流程是为了实现团队协作、提高代码的可管理性、确保代码质量,并且避免多人同时修改同一部分代码导致冲突。以下是这个流程的目的和具体步骤。 目录 1. 在 master 上新建一个分支 2. 进行功能…...
Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】
🎀🎀🎀【AI辅助编程系列】🎀🎀🎀 Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...
【时间之外】IT人求职和创业应知【74】-运维机器人
目录 OpenAI最强推理模型o3发布,AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪,贵知足。 感谢所有打开这个页面的朋友。人生不如意,开越野车去撒野,会害了自己,不如…...
高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容
预览 第1步:理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
