OpenCV
OpenCV学习笔记
ShyHG
路漫漫其修远兮~
展开
-
Ubuntu 编译安装OpenCV并且显示具体位置的像素值
Ubuntu OpenCV安装教程及常规问题解决,且最终支持放大显示具体位置的像素值原创 2023-02-07 09:20:13 · 382 阅读 · 1 评论 -
OpenCV-14-一些案例
1. 统计零件数量,可以采用腐蚀,但很多时候距离变换更适用/** 统计零件的数量*/#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ // 图片路径 string path = "/home/kaijun/Pictures/lingjian.png"; //1. 读取图片 Mat原创 2021-04-05 16:09:33 · 375 阅读 · 0 评论 -
OpenCV-13-泛洪(漫水)填充、分水岭、距离变换
1. 泛洪填充、漫水填充鼠标点击选择中心点进行填充(鼠标单击事件)#include <iostream>#include <opencv2/opencv.hpp>using namespace std;using namespace cv;Mat src;RNG rng(123456);void onMouse(int event, int x, int y, int flags, void* userdata){ // 如果鼠标左键被按下,就在这里打个原创 2021-04-05 14:10:40 · 554 阅读 · 0 评论 -
OpenCV-12-模板匹配、膨胀腐蚀等形态学操作、直线和多边形拟合
1. OpenCV中提供的模板匹配算法平方差匹配法CV_TM_SQDIFF归一化平方差匹配法CV_TM_SQDIFF_NORMED相关匹配法CV_TM_CCORR归一化相关匹配法CV_TM_CCORR_NORMED系数匹配法CV_TM_CCOEFF化相关系数匹配法CV_TMCCOEFF_NORMED注意 :对于方法SQDIFF和SQDIFF_NORMED两种方法来讲,越小的值就有着更高的匹配结果,而其余的方法则是数值越大匹配效果越好。// 读取原图Mat src = imread(".原创 2021-04-05 11:20:11 · 439 阅读 · 0 评论 -
OpenCV-11-C++获取图像属性、图像直方图绘制及均衡化、卷积和滤波
1. 获得图像属性Mat src = imread("./lena.jpg");//尺寸 src.size(); //行数 src.rows(); //列数 src.cols(); //通道数 src.channels(); //数据类型 src.type();2. Mat类的创建、矩形定义Mat src = Mat::zeros(600,400,CV_8UC3); //8位无符号3通道Mat dst(400,600,CV_8UC3);//矩形类的定义Rect rect(1原创 2021-04-04 21:24:33 · 418 阅读 · 0 评论 -
OpenCV-10-直方图匹配/直方图规定化
直方图匹配又称为直方图规定化,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。 即将某幅影像或某一区域的直方图匹配到另一幅影像上。使两幅影像的色调保持一致。可以在单波段影像直方图之间进行匹配,也可以对多波段影像进行同时匹配。两幅图像比对前,通常要使其直方图形式一致。直方图规定化的实现步骤如下:计算原图像的累积直方图计算规定直方图的累积直方图计算两累积直方图的差值的绝对值根据累积直方图最小差值建立灰度级的映射 注意:彩色图像的直方图匹配只是先分解通道,对各个通道分别直方图规.原创 2021-04-04 16:57:20 · 1305 阅读 · 4 评论 -
OpenCV-09-霍夫变换及轮廓查找(绘制 最小外接圆、旋转外接矩形、不旋转外接矩形)
1. 霍夫直线变换,是在极坐标上,对某一个点进行旋转,绘制曲线,当两条极坐标曲线相交于一点,则这两个点在一条线上,有n个点在极坐标上的曲线相交了m次,当m大于一定的阈值,则认为存在该条直线。霍夫直线的绘制代码:rho = 1;theta = np.pi/180threshold=0lines = cv.HoughLines(img,rho, theta, threshold)2. 绘制棋盘上的直线# 霍夫变换# 线段以像素为单位的距离精度,double类型的,推荐用1.0rho =原创 2021-04-02 21:49:55 · 1064 阅读 · 0 评论 -
OpenCV-08-图像降噪和边缘检测
1. 滤波器的选择及设计滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。当然了,这不是硬性要求了。如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。2. 通过自定义构造矩阵实现滤波kernel = np.array([[1,1,1],原创 2021-04-02 19:24:14 · 819 阅读 · 0 评论 -
OpenCV-07-图像的二值化(阈值分割)
1. 图像的二值化#返回阈值和二值化后的图片ret,res = cv.threshold(img,阈值,最大值,类型)'''类型主要有:THRESH_BINARY 高于阈值改为255,低于阈值改为0THRESH_BINARY_INV 高于阈值改为0,低于阈值改为255THRESH_TRUNC 截断,高于阈值改为阈值,最大值失效THRESH_TOZERO 高于阈值不改变,低于阈值改为0THRESH_TOZERO_INV 高于阈值该为0,低于阈值不改变'''2.原创 2021-04-02 16:57:09 · 534 阅读 · 0 评论 -
OpenCV-06-颜色过滤及抠图
1. HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;饱和度S饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的原创 2021-04-02 15:00:46 · 2664 阅读 · 0 评论 -
OpenCV-05-人脸识别
1.利用OpenCV中的api实现人脸和人眼检测,本质是利用Haar特征+Adaboost级联分类器实现步骤:加载特征xml文件加载图片灰度处理检测判断绘制出检测出来的人脸# 加载已经训练好的特征文件faces_xml = cv.CascadeClassifier("haarcascade_frontalface_default.xml")# 根据特征文件去查找人脸faces_xml.detectMultiScale(图像, 缩放系数, 至少检验次数)# 加载已经训练好的特征文件原创 2021-04-02 13:49:44 · 122 阅读 · 1 评论 -
OpenCV-04-摄像头及视频处理
1. 获取摄像头或视频的状态及属性import cv2 as cv#打开摄像头 0代表设备编号 0,1,2,3,4..video = cv.VideoCapture(0)#打开视频#video = cv.VideoCapture("img/twotiger.avi")# 判断视频是否打开成功isOpened = video.isOpened()print("视频是否打开成功:",isOpened)# 获取图片的信息:帧率fps = video.get(cv.CAP_PROP_FPS)原创 2021-04-02 10:45:07 · 155 阅读 · 0 评论 -
OpenCV-03-图像美化(亮度提升、直方图均衡化)
1. 图像亮度提升:可以直接对灰度值做加法或乘法,注意值溢出问题。# 定义颜色改变的值count=35# 遍历每一个像素点for row in range(height): for col in range(width): # 获取每个像素点的颜色值 (b,g,r) = img[row,col] # 增大当前颜色值 newb = b + count newg = g + count newr原创 2021-04-01 23:05:23 · 1616 阅读 · 0 评论 -
OpenCV-02-图像特效及形状绘制
图像的融合,借助addWeighted()函数实现''' 注意: 进行叠加的两张图片宽高应该相同 叠加之后的像素偏移值如果填的话不要填太大,超过255会导致图像偏白'''cv.addWeighted(图像1,权重1,图像2,权重2,叠加之后的像素偏移值)图像通道的拆分,调用split()函数result = cv.split(src); # (255,125,200) split (255) , (125) , (200) 255种灰度 -- 0,255cv..原创 2021-04-01 15:24:10 · 137 阅读 · 0 评论 -
OpenCV-01-图像的几何变换
imread后的返回值其实是一个矩阵,这个矩阵shape是(高,宽,维度)通过imread获得的src矩阵,每个元素值是(B,G,R)而不是常规的(R,G,B)更改原始图像的数据时候,记住的一个前提是原始图像是一个矩阵。数据类型(dtype),uint8正好满足0-255的范围图像的裁剪本质上是对src矩阵操作,选取src矩阵中的部分区域即为裁剪,使用切片就行,src[175:240,180:300](记住这里是先高值,再宽值)python的切片是对原始数据的引用,修改切片后的数据会更改原始数据.原创 2021-04-01 13:38:03 · 261 阅读 · 0 评论