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

初入OpenCV

OpenCV简介

OpenCV是一个开源的跨平台计算机视觉库,它实现了图像处理计算机视觉方面的很多通用算法。

应用场景:

        目标识别:人脸、车辆、车牌、动物;

        自动驾驶;医学影像分析;

        视频内容理解分析:文字识别、公众人物识别、识别各类物品

OpenCV图像模式

位图模式

        位图模式就是1位二进制深度的图像模式,只有黑白两种颜色。它可以由扫描或置入黑色的矢量线条图像生成,也只能由灰度模式转换而来。

灰度模式

        灰度模式是8位二进制深度的图像模式,在全黑和全白间插有254个灰度等级的颜色来描绘灰度模式的图像,所有模式的图像都能转换成灰度模式。

RGB模式

        简而言之就是彩色。

新建项目

进入Qt新建一个项目,打开.pro文件,添加以下代码

INCLUDEPATH +=/usr/local/include/
LIBS+=/usr/local/lib/libopencv_world.so

引入头文件和域

#include <opencv2/opencv.hpp>
using namespace cv;

加载图像

示例

我们来使用OpenCV来实现加载一张图片

    Mat img=imread("image/dog.jpg");imshow("img",img); // 显示图片waitKey(0); // 等待用户操作

 Mat类似于一个图片信息的类。

imread("path")读取图片信息,path为路径。

imshow()显示图片。

waitKey(0)类似于一个死循环等待用户操作,如果我们写waitKey(1000)就等待1s就消失,当然waitKey的话只要接收到键盘输入值就消失。

结果

 

处理图像像素点

示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;Mat image_process(Mat &img){int row=img.rows; // 获取行int col=img.cols * img.channels(); // 获取列// 改变图片像素点for(int i=0;i<row;i++){// 获取第i行地址uchar* data=img.ptr<uchar>(i);for(int j=0;j<col;j++){/*int q=rand()%col;data[q]=155;*/data[j]-=70;}}return img;
}int main()
{// 读取图片信息// Mat:图片信息的类Mat img=imread("image/dog.jpg",IMREAD_GRAYSCALE);image_process(img);imshow("img",img);while(1){int key=waitKey(0); // 等待用户操作if(key==10)break;}return 0;
}

结果

简易毛玻璃特效 

示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;// 毛玻璃特效
Mat img_glass(Mat &img)
{RNG rng;int random=0;for(int i=0;i<img.rows;i++){for(int j=0;j<img.cols-5;j++){random=rng.uniform(0,5);// at<>访问Mat数据域(BGR)img.at<Vec3b>(i,j)[0]=img.at<Vec3b>(i+random,j+random)[0]; // Bimg.at<Vec3b>(i,j)[1]=img.at<Vec3b>(i+random,j+random)[1]; // Gimg.at<Vec3b>(i,j)[2]=img.at<Vec3b>(i+random,j+random)[2]; // R}}return img;
}int main()
{// 读取图片信息// Mat:图片信息的类Mat img=imread("image/dog.jpg");img_glass(img);imshow("img",img);while(1){int key=waitKey(0); // 等待用户操作if(key==10)break;}return 0;
}

结果

读取视频

示例

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main()
{Mat frame;VideoCapture cap("video/carMove.mp4");while(cap.read(frame)){imshow("video",frame);waitKey(40);}return 0;
}

 

相关文章:

  • 用vite脚手架建立 前端工程
  • LabVIEW 编程难点
  • Shinkai开源程序 是一个双击安装 AI 管理器(本地和远程),它允许您使用简单的 UI 在 5 分钟或更短的时间内创建 AI 代理
  • VUE_UI组件的二次封装
  • GPT( Generative Pre-trained Transformer )模型:基于Transformer
  • React中的状态管理Dva总结
  • 理解 C# 中的各类指针
  • Android加固工具测评:易盾、顶象、360加固哪款更好用?
  • 【爬虫】DrissionPage-1
  • const char* 指向字符串数组和字符串的区别
  • 超声波传感器模块
  • llamafactory-记录一次消除模型随机性的成功过程
  • ElasticSearch深入解析(十一):分页
  • coze平台实现文生视频和图生视频(阿里云版)工作流
  • C++标准流详解:cin/cout的绑定机制与cerr/clog的缓冲差异
  • Landsat 5介绍
  • [超级简单]讲解如何用PHP实现LINE Pay API!
  • ELF文件详解
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- GPT源代码解析
  • 笔试强训(十七)
  • 汕头违建豪宅“英之园”将强拆,当地:将根据公告期内具体情况采取下一步措施
  • 茅台1935今年动销达到预期,暂无赴港上市计划!茅台业绩会回应多个热点
  • A股高开高走:沪指涨0.82%,创指涨2.63%,超4100股收涨
  • 非洲雕刻艺术有着怎样的“变形之美”
  • 印巴战火LIVE丨“快速接近战争状态”:印度袭击巴军事基地,巴启动反制军事行动
  • 匈牙利外长称匈方已驱逐两名乌克兰外交官