OpenCV
小菜鸡加油
程序猿的探索之路
走好人生中的每一步路!
展开
-
【笔记】pthread 条件变量:条件变量是线程使用的一种同步机制,条件变量给多个线程提供了会合的场所,条件变量和互斥量一起用的时候,允许线程以无竞争的方式等待特定的条件发生,条件是受互斥量保护的
pthread条件变量muduo/base/Condition.h中有对条件变量的封装,底层是pthread 条件变量。条件变量条件变量是线程使用的一种同步机制。条件变量给多个线程提供了会合的场所。条件变量和互斥量一起用的时候,允许线程以无竞争的方式等待特定的条件发生。条件是受互斥量保护的。线程在改变条件状态时必须首先对互斥量加锁。相关函数1.初始化与销毁pthread_cond_t数据类型表示条件变量,使用以下两个函数对条件变量进行初始化和销毁:#include <pthr..转载 2022-01-12 08:51:14 · 235 阅读 · 0 评论 -
【笔记】C++ 多线程:进程同时创建5个线程,各自调用同一个函数;线程调用的函数在一个类中,且应将该函数声明为静态成员函数;进程创建时设置pthread_attr_t属性及join功能;互斥锁的实现
注:os:ubuntu 10.04 c++1. 进程同时创建5个线程,各自调用同一个函数#include <iostream>#include <pthread.h> //多线程相关操作头文件,可移植众多平台 using namespace std; #define NUM_THREADS 5 //线程数 void* say_hello( void* args ){ cout << "hello..." << en..转载 2022-01-11 11:36:35 · 2431 阅读 · 0 评论 -
【笔记】Opencv 均值漂移pyrMeanShiftFiltering彩色图像分割流程剖析
可视化超参数作用机制(一):动画化激活函数转载 2022-01-10 10:31:26 · 1870 阅读 · 0 评论 -
【笔记】Opencv 图像清晰度平价(相机自动对焦)
相机的自动对焦要求根据拍摄环境和场景的变化,通过相机内部的微型驱动马达,自动调节相机镜头和CCD之间的距离,保证像平面正好投影到CCD的成像表面。这时候物体的成像比较清洗,图像细节信息丰富。图像清晰度评价算法有很多种,在空域中,主要思路是考察图像的领域对比度,即相邻像素间的灰度特征的梯度差;在频域中,主要思路是考察图像的频率分量,对焦清洗的图像高频分量较多,对焦模糊的图像低频分量较多。这里实现3种清晰度评价方法,分别是Tenengrad梯度方法、Laplacian梯度方法和方差方法。1...转载 2022-01-09 11:39:54 · 1531 阅读 · 0 评论 -
【笔记】Opencv Mat 图像处理基本操作
1. 图片加载、灰度图、显示和保存cv::Mat img = cv::imread("01.jpg");//cv::Mat img = cv::imread("01.jpg", 0); //以灰度图读入 cv::cvtColor(img, img, cv::COLOR_BGR2GRAY); cv::imshow("img_show", img);cv::waitKey(); cv::imwrite("save.jpg", img);2. 图片宽、高、通道模式、平均..转载 2022-01-08 21:59:46 · 2434 阅读 · 0 评论 -
【待测】Opencv 中基于HOG特征的行人检测:HOG特征是用于目标检测的特征描述子,它通过计算和统计图像局部区域的梯度方向直方图来构成特征,用这些特征描述原始图像
目前基于机器学习方法的行人检测的主流特征描述子之一是HOG(Histogram of Oriented Gradient, 方向梯度直方图)。HOG特征是用于目标检测的特征描述子,它通过计算和统计图像局部区域的梯度方向直方图来构成特征,用这些特征描述原始图像。HOG的核心思想是所检测的局部物体外形能够被光强梯度或边缘方向的分布所描述。通过将整幅图像分割成小的连接区域(称为cells),每个cell生成一个方向梯度直方图或者cell中pixel的边缘方向,这些直方图的组...转载 2022-01-07 16:08:23 · 491 阅读 · 0 评论 -
【笔记】使用Opencv中matchTemplate模板匹配方法跟踪移动目标
#include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/imgproc.hpp" #include<iostream> using namespace cv; using namespace std; Mat image; //视频流Mat imageCopy; //绘制矩形框时用来拷贝原图的图像Mat rectImage; //子图像bool lef...转载 2022-01-06 21:03:34 · 591 阅读 · 0 评论 -
【笔记】位图(.bmp)和矢量图(Vector):位图是点阵图或光栅图,使用像素的一格一格来描述图像,放大以后每一个像素看就像是一个个的马赛克;矢量图是使用直线和曲线来描述图形,可以无限方法,不会失真
一、什么是位图计算机能以位图和矢量图格式显示图像。1、位图(Bitmap):图像又称点阵图或光栅图,它使用我们称为像素(象素,Pixel)的一格一格的小点来描述图像。计算机屏幕其实就是一张包含大量像素点的网格。当我们把位图放大时,每一个像素小点看上去就像是一个个马赛克色块。2、矢量图(Vector)使用直线和曲线来描述图形,这些图形的元素是一些点、线、矩形、多边形、圆和弧线等等,它们都是通过数学公式计算获得的。位图和矢量图最简单的区别就是:矢量图可以无限放大,而且不会失真;而位图..转载 2022-01-05 09:40:54 · 8154 阅读 · 0 评论 -
【笔记】Opencv光流运动物体追踪:光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”
光流的概念是由一个叫Gibson的大佬在1950年提出来的。它描述是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。那么所说的光流到底是什么鬼?简单来说,上图表现的就是光流,光流描述的是图像上每个像素点的灰度的位置(速度)变化情况,光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流...转载 2022-01-04 21:52:34 · 930 阅读 · 0 评论 -
【笔记】使用Opencv中均值漂移meanShift跟踪移动目标
Mean Shift均值漂移算法是无参密度估计理论的一种,无参密度估计不需要事先知道对象的任何先验知识,完全依靠训练数据进行估计,并且可以用于任意形状的密度估计,在某一连续点处的密度函数值可由该点邻域中的若干样本点估计得出。Mean shift将特征空间视为先验概率密度函数,那么输入就被视为是一组满足某种概率分布的样本点,这样一来,特征空间中数据最密集的地方,对应于概率密度最大的地方,且概率密度的质心就可以被视为是概率密度函数的局部最优值,也就是要求的聚类中心。对于每一个样本点,计算以它为中心的某个范..转载 2022-01-03 19:34:51 · 329 阅读 · 0 评论 -
【笔记】Opencv Sift 和 Surf 特征实现图像无缝拼接生成全景图像
测试用例一原图2:Sift拼接效果:Surf拼接效果:测试用例二原图2:Sift拼接效果:Surf拼接效果:以下是Opencv实现:#include "highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" using namespace cv; /...转载 2022-01-02 15:48:42 · 962 阅读 · 0 评论 -
【笔记】Opencv Surf算子特征提取与最优匹配
CV_WRAP SURF(double hessianThreshold, int nOctaves=4, int nOctaveLayers=2, bool extended=true, bool upright=false);void drawKeypoints( const Mat& image, const vector<KeyPoint>& keypoints, CV_OUT...转载 2022-01-01 22:34:28 · 331 阅读 · 0 评论 -
【笔记】Opencv 图像增强算法实现:直方图均衡化、拉普拉斯、Log、Gamma
#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp>#include <iostream> using namespace cv; int main(int argc, char *argv[]){ Mat image = imread("Test.jpg", 1); if (image.empty()) { std::cout &...转载 2021-12-31 17:37:09 · 341 阅读 · 2 评论 -
【笔记】Opencv修复环境光导致的图像变色:将受环境光影响的白色转化为纯白色,纯白色的RGB分量按照1:1:1的比例放大后,得到的是没有偏色的白色
#include <highgui/highgui.hpp>#include <imgproc/imgproc.hpp> using namespace cv; int main(){ Mat imageSource = imread("02.jpg"); imshow("原始图像", imageSource); vector<Mat> imageRGB; //RGB三通道分离 split(imageSource, imageRG...转载 2021-12-30 19:39:17 · 591 阅读 · 0 评论 -
【笔记】Opencv 遍历文件夹:substr && std::string::find_last_of
注:substr注:正文:1 获取完整路径:#include <opencv2\opencv.hpp>#include <string> int main(int argc, char* argv[]) { std::string folder_path = "D:\\database\\test\\*.*"; //path of folder, you can replace "*.*" by...转载 2021-12-29 12:10:38 · 352 阅读 · 0 评论 -
【笔记】python在图片上输出中文:使用PIL.Image 和 Opencv图像格式转换
# -*- coding: utf-8 -*-import cv2import numpyfrom PIL import Image, ImageDraw, ImageFont if __name__ == '__main__': img_OpenCV = cv2.imread('01.jpg') # 图像从OpenCV格式转换成PIL格式 img_PIL = Image.fromarray(cv2.cvtColor(img_OpenCV, cv2.CO...转载 2021-12-29 12:00:51 · 969 阅读 · 0 评论 -
【笔记】Opencv 绘制朱利亚(Julia)集合图形
#include <Windows.h>#include<highgui/highgui.hpp> using namespace cv; const int icount = 200; //迭代次数 const float c = -0.85; //实部const float d = 0.088; //虚部double m_real, m_image; //Mandelbro集 class ComplexClas...转载 2021-12-26 09:20:12 · 433 阅读 · 0 评论 -
【待测】CUDA二维纹理内存+Opencv图像滤波
#include <cuda_runtime.h> #include <highgui/highgui.hpp>#include <imgproc/imgproc.hpp> using namespace cv; int width = 512;int height = 512; // 2维纹理texture<float, 2, cudaReadModeElementType> texRef; // 核函数__global_...转载 2021-12-25 11:27:08 · 406 阅读 · 0 评论 -
【笔记】Windows下:Cmake生成Opencv解决方案 && 编译Opencv源码
生成OpenCV工程需要用到CMake,所以第一步需要下载CMake软件,下载链接:CMake下载目前最新的版本是3.7.1,这里选择下载Platform下的Windows win32-x86 ZIP,大小21M:#include <highgui/highgui.hpp> using namespace cv; int main(){...转载 2021-12-24 09:43:24 · 405 阅读 · 0 评论 -
【笔记】Opencv处理图片:实现马赛克和毛玻璃滤镜效果
#include <core\core.hpp>#include <highgui\highgui.hpp> using namespace cv; Mat imageSourceCopy; //原始图像Mat imageSource; //原始图像拷贝int neightbourHood = 9; //马赛克上每个方框的像素大小 RNG rng;int randomNum; //邻域内随机值 Point ptL; //左键按下时坐标Point p...转载 2021-12-24 09:28:27 · 209 阅读 · 0 评论 -
【笔记】Surf算法特征点检测与匹配:是Sift算法的改进,提升了算法的执行效率,为算法在实时计算机视觉系统中应用提供了可能;包括局部特征点的提取、特征点的描述、特征点的匹配
Surf算法中,也是在特征点周围取一个4*4的矩形区域块,但是所取得矩形区域方向是沿着特征点的主方向。每个子区域统计25个像素的水平方向和垂直方向的haar小波特征,这里的水平和垂直方向都会相对主方向而言的。该haar小波特征为水平方向指之和、垂直方向值之和、水平方向绝对值之和以及垂直方向绝对值之和的4个方向。该过程示意图如下:参考资料: SURF算法分析...转载 2021-12-23 11:56:02 · 502 阅读 · 0 评论 -
【笔记】Opencv 目标跟踪CamShift算法:MeanShift算法的改进算法,在跟踪的过程中随目标大小的变化实时调整搜索窗口大小,对视频序列中的每一帧采用MeanShift来寻找最优迭代结果
注:正文:CamShift( InputArray probImage, CV_OUT CV_IN_OUT Rect& window, TermCriteria criteria );#include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/imgproc.hpp" #...转载 2021-12-23 11:15:18 · 384 阅读 · 2 评论 -
【笔记】matplotlib 使用 plt.imshow()打开图像为空白:同一个矩阵(图片)使用plt.imshow() 显示和 cv2.imwrite显示不相同的问题
import numpy as npimport matplotlib.pyplot as plt z # 假设这是之前准备用来画图的张量或矩阵 z_new = z.astype(np.int32) plt.figure('your title') plt.imshow(z_new) plt.show()import numpy as npimport matplotlib.pyplot as plt w # 假设这是之前准备用来画图的张量或矩阵,范围为0-1之间...转载 2021-12-23 10:47:31 · 537 阅读 · 0 评论 -
【笔记】Opencv中使用Surf特征实现图像配准及对透视变换矩阵H的平移修正
#include "highgui/highgui.hpp" #include "opencv2/nonfree/nonfree.hpp" #include "opencv2/legacy/legacy.hpp" #include <iostream> using namespace cv;using namespace std; int main(int argc,char *argv[]) { Mat image01=imread(argv[1]...转载 2021-12-22 10:14:08 · 992 阅读 · 0 评论 -
【笔记】Opencv 形态学边界提取:getStructuringElement()可以生成形态学操作中用到的核 Mat ...(int shape,Size ksize,Point anchor)
getStructuringElement 原型:Mat getStructuringElement(int shape, //核的形状 0:矩形 1:十字交叉形 2: 椭圆 Size ksize,//核大小 Point anchor=Point(-1,-1) //核中心位置,默认位于形状中心处 );#include "core/core.hpp"#include "highgui/highgui.hpp"#include...转载 2021-12-22 09:58:26 · 1514 阅读 · 0 评论 -
【笔记】Opencv 保存摄像头视频 && 各种编码器下视频文件占用空间对比
VideoWriter类的一个常用构造方式如下:VideoWriter(const string& filename, int fourcc, double fps,Size frameSize, bool isColor=true);#include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> #include <opencv2/cor...转载 2021-12-21 11:34:13 · 217 阅读 · 0 评论 -
【笔记】Opencv 函数setMouseCallback鼠标事件响应:可用于开发一个图像小工具的时候
可以编码验证一下回调函数的这个调用机制:#include "core/core.hpp"#include "highgui/highgui.hpp"#include "imgproc/imgproc.hpp"#include<iostream> using namespace cv;using namespace std; void OnMouseAction(int event,int x,int y,int flags,void *ustc); //鼠标回调...转载 2021-12-21 11:24:54 · 515 阅读 · 0 评论 -
【笔记】Opencv 实现拼图板小游戏
for(int i=0;i<rows;i++) { for(int j=0;j<cols;j++) { Mat SourceRoi=Sourceimage(Rect(j*Roicols,i*Roirows,Roicols-1,Roirows-1)); arraryimage.push_back(SourceRoi); } }//*******************************************************...转载 2021-12-20 09:43:06 · 230 阅读 · 0 评论 -
【笔记】Opencv 坐标系与操作像素的四种方法 VS Opencv的Copy方法:at方法、行指针方法、指针方法、迭代方法
#include<iostream>#include<core/core.hpp>#include<highgui/highgui.hpp> using namespace cv;using namespace std; int main(){ Mat image(Size(500,500),CV_8UC3); image.at<Vec3b>(100,250)[0]=0; image.at<Vec3b>(100,25...转载 2021-12-20 09:13:30 · 444 阅读 · 0 评论 -
【笔记】Opencv的肤色检测:(calcHist、normalize、calcBackProject函数)图像直方图和反向投影
RGB模型是图像处理中常用的颜色模型,多用于颜色显示和图像处理,三维坐标中H(Hue)代表色调,S(Saturation)代表饱和度,V代表(Value)明度,理解起来很容易,是一种针对用户观感的一种颜色模型,侧重于色彩表示,什么颜色、深浅如何、明暗如何,跟人眼的直观感受很契合。对于肤色的直方图,只计算H和S分量的直方图,所以肤色的明暗度对检测结果影响很小,提高了对不同灰度的鲁棒性。关键函数:calcHist、normalize 、calcBackPro...转载 2021-12-19 16:30:12 · 347 阅读 · 0 评论 -
【笔记】Opencv 画直方图
void calcHist( const Mat* images, int nimages, const int* channels, InputArray mask, OutputArray hist, int dims, const int* histSize, const float** ranges, bool uniform=...转载 2021-12-19 15:58:14 · 98 阅读 · 0 评论 -
【笔记】OpenCV图像修复和复原 inpaint():src、inpaintMask、dst、inpaintRadius、flags
注:对于自己模糊处理得到的图片然后在去模糊使用 SRN。注:对于CV_EVENT_LBUTTONDOWN CV_RGB2GRAY CV_THRESH_BINARY 都显示未定义的标识符 我的头文件和你网页上显示的一样 使用的是vs2017 opencv4.1.0 这种情况该怎么解决?#include<opencv2> #include<opencv2> 加入这两个头文件后 正常了 请问 为什么你的程序里不用加这个呢 是不在在哪里可以设置不用加这两个头文件呢?..转载 2021-12-18 09:38:08 · 750 阅读 · 0 评论 -
【待测】Opencv 中视频播放与进度控制
#include "core/core.hpp"#include "highgui/highgui.hpp"#include "imgproc/imgproc.hpp"#include <iostream> using namespace cv; int main(int argc,char *argv[]){ VideoCapture videoFriends(argv[1]); VideoCapture videoPhone(argv[2]); doub...转载 2021-12-17 09:09:52 · 292 阅读 · 0 评论 -
【待测】Opencv 实现简易播放器
class Vardefine{public: static bool pause; //暂停标志位 static bool playOn; //继续播放标志位 static bool playAgain; //再次播放标志位 static double frameNum; //当前播放帧数 static CString str; //保存视频文件路径}; //变量初始化bool Vardefine::pause=false;bool Vardefine...转载 2021-12-17 09:00:24 · 206 阅读 · 0 评论 -
【笔记】Opencv 实现两幅图像融合:实现两幅图像线性(不同系数下)的融合涉及到Opencv中两个关键的方法,addWeighted()和createTrackbar()
void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype=-1);</span>int createTrackbar(const string& trackbarname, const string& winname,int* value, int count,Trackba...转载 2021-12-16 09:35:16 · 278 阅读 · 0 评论 -
【笔记】 MFC 在Opencv2如何显示Mat图片:Opencv 1.0在MFC框架上通过Cvvimage类中的DrawPicToHDC( IplImage *img, UINT ID)方法显示图片
注:Picture Control控件类型不需要必须是矩形(Rectangle),使用默认的类型帧(Frame)也可以正常显示。namedWindow("view", WINDOW_AUTOSIZE);HWND hWnd = (HWND) cvGetWindowHandle("view");HWND hParent = ::GetParent(hWnd);::SetParent(hWnd, GetDlgItem(IDC_STATIC_CV)->m_hWnd);::ShowWi..转载 2021-12-16 09:24:12 · 452 阅读 · 0 评论 -
【笔记】C++中 位运算、逻辑运算
注: C语言本身没有bool变量,可以通过#define宏定义模拟true和false。Code:#include <stdio.h>int main(){ int a = 5; //101 int b = 3; //011 printf("%d\n",a&b); //001 值为1 printf("%d\n",a|b); //111 值为7 printf("%d\n",a^b); //110 值为6 printf("%d转载 2021-12-15 19:31:32 · 126 阅读 · 0 评论 -
【笔记】Opencv图像腐蚀:10个步骤检测出图片中条形码,这种方法仅适用于简单的区域,稍微复杂一些的区域还是需要进行更细致的判断
Code:#include "core/core.hpp"#include "highgui/highgui.hpp"#include "imgproc/imgproc.hpp" using namespace cv; int main(int argc,char *argv[]){ Mat image,imageGray,imageGuussian; Mat imageSobelX,imageSobelY,imageSobelOu...转载 2021-12-15 10:48:29 · 275 阅读 · 0 评论 -
【笔记】findContours 轮廓查找
#include "core/core.hpp" #include "highgui/highgui.hpp" #include "imgproc/imgproc.hpp" #include "iostream" using namespace std; using namespace cv; int main(int argc,char *argv[]) { Mat imageSource=imread(argv[1],0); imshow("Source I...转载 2021-12-14 21:38:54 · 180 阅读 · 0 评论 -
【笔记】Opencv中integral计算积分图:通过简单几次加减运算就可以得到某一区域内“像素和”这一特征,计算速度非常快,并且这种速度的提升效果随着区域面积的增大和计算次数的增多表现的更为明显
void integral( InputArray src, OutputArray sum, int sdepth=-1 );第三个参数sdepth,定义积分图的深度(depth),32位整型或者32位、64位浮点型。注意图像的深度跟图像的通道数是无关的,相关概念可以参看这里:Opencv Mat矩阵中data、size、depth、elemSize、step等属性的理解;所以在使用sum之前,声明即可,可以不事先定义Mat矩阵的大小和数据类型。#include "hi...转载 2021-12-12 22:28:05 · 252 阅读 · 0 评论