opencv常用库的使用

opencv库函数调用:opencv主要用来处理图像
1、图像

灰度图cvtColor(src,dst,CV_BGR2GRAY);

彩色图cvtColor(src,dst,CV_BGR2RGB);

像素的深度:用来表达一个像素所需要的比特数


2、读取图像

Mat cv::imread(const string& filename, int flags = 1);

示例:Mat img = imread("lena.jpg");


3、显示图像

void cv::imshow(const string& winname, InputArray mat);

示例:imshow("lena",img);


4、保存图像

void cv::imwrite(const string& filename, InputArray img, const vector<int>& params = vector<int>());

示例:imwrite("lena.jpg",img);


5、Mat类

Mat的构造函数:

Mat::Mat(int rows, int cols, int type, const Scalar& s);

Mat::at 访问像素

Mat::at<Vec3b>(int y, int x)

示例: for(int i = 0;i < mat.rows;++i)

{

for(int j = 0;j < mat.cols;++j)

{

Vec3b a = {0xFF, 0xFF, 0xFF};

mat.at<Vec3b>(i, j) = a;

}

}

mat.at<Vec3b>(5, 5) = Vec3b(3,4,5);


6、图像的翻转

flip(origion, dst, 0); //水平翻转

flip(origion, dst, 1); //竖直翻转

flip(origion, dst, -1); //同时翻转


7、图像的缩放

resize(origion, dst, Size(100,100));


8、图像的模糊

blur(origion, dst, Size(9,9)); //中值滤波

9*9的卷积核

GaussianBlur(origion, dst, Size(9,9), 0, 0); //高斯滤波

9*9的卷积核,0,0代表标准差

两者的区别:高斯滤波的卷积核带有权重,中值滤波则没有权重是求平均值


9、图像的二值化处理

threshold(bin, bin, 127, 255, THRESH_BINARY_INV);


10、腐蚀:

/* 腐蚀主要用来消噪, 突兀的出现一些噪点会被腐蚀掉,

* 原理:卷积核只要有一个背景0, 则该点直接为0

* 膨胀:增强噪点 */

erode(origion, dst, Mat(), Point(-1,-1), 1); //主要作用是用来消噪的,1代表迭代次数


11、膨胀:

dilate(origion, dst, Mat(), Point(-1,-1), 1);

膨胀:增强噪点


使用opencv调用摄像头实现人脸检测定位

#include <vector>

int main(void)

{

VideoCapture cap; //摄像头

CascadeClassifier classiFier("D:/opencv-3.4.5-build/install/etc/haarcascades/haarcascade_frontalface_default.xml"); //人脸分类器

Mat image; //图像

Mat gary; //灰度图

vector<Rect> vr; //矩形框

if (cap.open(0)) //打开摄像头

{

while (cap.read(image)) //读取图像

{

cvtColor(image, gary, COLOR_BGR2GRAY); //转化为灰度图

classiFier.detectMultiScale(gary, vr); //检测人脸

for (auto &x : vr) //遍历矩形框

{

rectangle(image, x, Scalar(0,0,255), 2); //绘制矩形框

}

imshow("cap", image);

waitKey(30);

}

}

else

{

cout << "error!" << endl;

}

return 0;

}


在QT下使用opencv实现图片人脸检测定位

int main(void)

{

QString fileName = QFileDialog::getOpenFileName(this, "choose a file", "d:/", "Images (*.png *.xpm *.jpg)"); //选择文件

if(!fileName.isEmpty()) //判断是否选择文件

{

Mat origion = imread(fileName.toStdString()); //读取图像

cvtColor(origion, origion, COLOR_BGR2GRAY); //转化为灰度图

threshold(origion, origion, 127, 255, THRESH_BINARY_INV); //二值化

QImage image(origion.data, origion.cols, origion.rows, origion.step, QImage::Format_Indexed8); //转化为QImage

QPixmap pixmap = QPixmap::fromImage(image); //转化为QPixmap

ui->label->setPixmap(pixmap); //显示

ui->label->setScaledContents(true); //自适应(窗口可拖动)

}

}


在QT下调用opencv库实现摄像头人脸检测定位

if(cap.open(0)) //打开摄像头

{

QTimer *timer = new QTimer(this); //定时器

connect(timer, &QTimer::timeout, this, &MyWiget::onTimerTimeOut); //连接信号和槽

timer->start(30); //30ms

}

void MyWiget::onTimerTimeOut() //定时器槽函数

{

Mat frame; //图像

if (cap.read(frame)) //读取图像

{

cvtColor(frame, frame, COLOR_BGR2GRAY); //转化为灰度图

QImage image(frame.data, frame.cols, frame.rows, frame.step, QImage::Format_Indexed8); //转化为QImage

QPixmap pixmap =QPixmap::fromImage(image); //转化为QPixmap

ui->label->setPixmap(pixmap); //显示

ui->label->setScaledContents(true); //自适应(窗口可拖动)

}

}

相关推荐
羊小猪~~4 分钟前
数据库学习笔记(十七)--触发器的使用
数据库·人工智能·后端·sql·深度学习·mysql·考研
摸爬滚打李上进22 分钟前
重生学AI第十六集:线性层nn.Linear
人工智能·pytorch·python·神经网络·机器学习
HuashuiMu花水木23 分钟前
PyTorch笔记1----------Tensor(张量):基本概念、创建、属性、算数运算
人工智能·pytorch·笔记
lishaoan7728 分钟前
使用tensorflow的线性回归的例子(四)
人工智能·tensorflow·线性回归
AI让世界更懂你36 分钟前
【ACL系列论文写作指北15-如何进行reveiw】-公平、公正、公开
人工智能·自然语言处理
牛客企业服务2 小时前
2025年AI面试推荐榜单,数字化招聘转型优选
人工智能·python·算法·面试·职场和发展·金融·求职招聘
视觉语言导航2 小时前
RAL-2025 | 清华大学数字孪生驱动的机器人视觉导航!VR-Robo:面向视觉机器人导航与运动的现实-模拟-现实框架
人工智能·深度学习·机器人·具身智能
**梯度已爆炸**2 小时前
自然语言处理入门
人工智能·自然语言处理
ctrlworks3 小时前
楼宇自控核心功能:实时监控设备运行,快速诊断故障,赋能设备寿命延长
人工智能·ba系统厂商·楼宇自控系统厂家·ibms系统厂家·建筑管理系统厂家·能耗监测系统厂家
BFT白芙堂3 小时前
睿尔曼系列机器人——以创新驱动未来,重塑智能协作新生态(上)
人工智能·机器学习·机器人·协作机器人·复合机器人·睿尔曼机器人