![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
OpenCV
岁月神偷小拳拳
这个作者很懒,什么都没留下…
展开
-
OpenCV4.0读取大于8bit位深的RGB图像
OpenCV4.0读取大于8bit位深的RGB图像:const char* filename = "1_16bit.png";Mat img = imread(filename, IMREAD_UNCHANGED);imwrite("test.png", img);1_16bit.png是一幅16bit的png图像,输出的test.png与1_16bit.png完全一样。原创 2021-12-16 16:45:07 · 2988 阅读 · 1 评论 -
OpenCV之bitwise_and、bitwise_or等图像的与或操作
1、图像的“与”操作bitwise_and()是对二进制数据进行“与”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=02、图像的“或”操作bitwise_or()是对二进制数据进行“或”操作,即对图像(灰度图像或彩色图像均可)每个像素值进行二进制“或”操作,1|1=1,1|0=0,0|1=0,0|0=03、图像的“异或”操作bitwise_xor()是对二进制数据进行“异或”..原创 2020-05-29 18:20:36 · 3411 阅读 · 0 评论 -
OpenCV将深度图转为伪彩图像
OpenCV将深度图转为伪彩图像,函数为applyColorMap()。调用方法如下:cv::applyColorMap(depthU8, image_ColorMap, cv::COLORMAP_JET);对应的颜色选项如下:原创 2020-04-02 14:55:04 · 4106 阅读 · 0 评论 -
opencv的cv2.imread,cv2.imwrite()函数读写图像之后,其像素值不相等的问题
使用opencv的cv2.imread()读取一幅图像,cv2.imwrite()函数保存图像之后,发现两幅图像的像素值不相等,存在微小差异,眼睛看着好像没啥差异,实际数值不一样,下图蓝色部分即为像素值不同的位置。test_image = 'ski.jpg'oriImg = cv2.imread(test_image,cv2.IMREAD_UNCHANGED) # B,G,R order...原创 2020-03-12 11:09:14 · 14695 阅读 · 1 评论 -
opencv3.4将图像指定区域用另一幅图像覆盖
opencv3.4将图像指定区域用另一幅图像覆盖,函数copyTo(roi , mask)。函数copyTo(roi , mask)函数后面的mask可以实现蒙版的功能。要注意mask的数据类型,必须是CV_8U,且通道数或者是1,或者与roi一致。#include <iostream>#include <opencv2/core/core.hpp>#inclu...原创 2020-03-11 11:33:18 · 3980 阅读 · 0 评论 -
opencv 2.4.1读入取视频失败的解决方法
#include <cv.h>#include <highgui.h>void main(){ VideoCapture cap; cap.open("1.avi"); Mat raw_image; while (cv::waitKey(1) < 0) { cap >> raw_im...原创 2020-03-10 16:53:29 · 385 阅读 · 0 评论 -
opencv多边形拟合曲线approxPolyDP()函数
approxPolyDP()函数是opencv中对指定的点集进行多边形逼近的函数,其逼近的精度可通过参数设置。对应的函数为:void approxPolyDP(InputArray curve, OutputArray approxCurve, double epsilon, bool closed);例如:approxPolyDP(contourMat, approxCurve, 10...原创 2019-01-08 14:51:57 · 40421 阅读 · 10 评论 -
调用opencv时发生的一点问题
一直使用opencv3.4.0,最近新出了opencv4.0.1,引发了一些问题。【有些问题不是版本所致,顺带发现的,总结一下】1.和版本相关问题:使用一样的代码,将opencv从3.4.0更改为4.0.1时,有些opencv中的宏定义无法识别;解决方法:在opencv4.0.1的头文件中找相应变量所在的头文件,添加进代码即可。 2.与版本无关问题:同样的代码,可以在VS工...原创 2019-02-25 17:40:21 · 6974 阅读 · 3 评论 -
opencv求图像Laplacian边缘,衡量图像的模糊程度
求一幅图像的模糊程度:高斯模糊->灰度化->拉普拉斯计算->绝对值(convertScaleAbs)->计算输出图像的方差,根据此方差来判断模糊程度。1、高斯模糊,GaussianBlur()void GaussianBlur( InputArray src, OutputArray dst, Size ksize, ...原创 2019-04-08 19:55:28 · 3768 阅读 · 0 评论 -
opencv中Mat类型数据的线性变换
opencv3.0以上版本中,如何改变Mat类型数据每个元素的值?如对每个元素进行下列操作:有两个函数可以实现:convertScaleAbs()与convertTo(),但是两者有一定的区别。1、convertScaleAbs()函数对图像中的每个元素,实现如下操作:void convertScaleAbs(InputArray src, OutputArray ds...原创 2019-04-12 13:38:36 · 1161 阅读 · 0 评论 -
opencv读取文件夹下的所有文件的文件名
opencv中有一个工具类Directory:它可以遍历对应文件夹下的所有文件,帮助读取文件夹下的所有文件名;【注意是opencv2.0版本才有这个函数,opencv3.0中没这个函数了。。。】Directory工具类中包含三个函数接口,分别是:static std::vector< std::string > GetListFiles (const std::stri...原创 2019-04-15 15:57:37 · 3006 阅读 · 0 评论 -
opencv实现两幅图像加权融合
addWeighted()函数来实现两幅图像的线性(不同系数下)融合。函数原型:void addWeighted(InputArray src1, double alpha, InputArray src2,double beta, double gamma, OutputArray dst, int dtype=-1);参数:第一个参数:src1,表示进行加权操作的第一个图像对象...原创 2019-05-24 15:49:03 · 3887 阅读 · 0 评论 -
opencv imwrite()函数保存png格式的图像
opencv imwrite()函数保存png格式的图像,默认保存方法是有损的,如果要保存无损图像则需要进行设置。如,rgb_image是一个Mat类型的变量:1、默认保存cv::imwrite("test.png", rgb_image);2、无损保存std::vector<int> compression_params;compression_par...原创 2019-07-04 13:54:02 · 17978 阅读 · 3 评论 -
OpenCV计算轮廓的重心
opencv计算某个轮廓的重心位置。 std::vector<std::vector<cv::Point>> mContoursPanel; cv::findContours(index_img, mContoursPanel, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE, cv::Point(0, 0)...原创 2019-08-05 09:25:30 · 5065 阅读 · 0 评论 -
opencv提取Mat中的某些行和列
原始Mat格式数据:cv::Mat A = Mat::zeros(4, 5, CV_32F);【4行5列,高4宽5】1、提取行函数:Mat::rowRange(intstartrow, intendrow)例:提取第0~2行(包括第2行)cv::Mat B = A.rowRange(0, 3).clone() ;2、提取列函数:Mat::colRange(in...原创 2019-09-03 15:10:59 · 10736 阅读 · 1 评论 -
opencv产生随机数
在很多过程中,我们需要生成一些随机数,opencv中生成随机数的方法如下:测试程序如下:【每次生成20个(0,100)之间的随机数,共生成10次】#include<iostream>#include<time.h>#include "opencv2/highgui/highgui.hpp"using namespace cv;using namespace...原创 2019-01-17 16:35:15 · 2818 阅读 · 0 评论 -
opencv矩阵通道拆分与合并
1.分离矩阵的3个通道:srcImg(三通道的彩色图像)->三个单通道的Mat(分别对应b,g,r)std::vector<cv::Mat> rgbChannels(3);cv::split(srcImg, rgbChannels);说明:B通道Mat:rgbChannels[0]G通道Mat:rgbChannels[1]R通道Mat:rgbChannels...原创 2018-12-20 12:17:55 · 2359 阅读 · 0 评论 -
OpenCV中Mat与内存之间的相互访问
如何取出Mat类型中的内存数据?如何根据内存创建一个Mat变量? 测试代码如下:#include <iostream>#include <vector>#include <opencv2/opencv.hpp>#include <core/core.hpp>#include <opencv2/imgproc/imgpro...原创 2018-12-01 15:40:20 · 3517 阅读 · 0 评论 -
opencv源码编译
1.下载安装cmake。(1)下载:camke的官网:http://www.cmake.org/上下载到,首先转到其下载页面。下载页面的Source distributions处可以下载到cmake软件的源码。而Binary distributions处可以下载到cmake的执行文件,我们只需要下载到其执行文件即可,选择Windows (Win32 Installer)进行下载原创 2016-03-15 17:03:31 · 520 阅读 · 0 评论 -
opencv库作为第三方库
在编译一个依赖opencv库的库时,报出以下错误:undefined reference to symbol ‘_ZN2cv6imreadERKNS_6StringEi’libopencv_core.so.2.4: error adding symbols: DSO missing from command lineerror: collect2: error: ld returned...原创 2018-09-13 15:06:55 · 2353 阅读 · 0 评论 -
将yuv图像转为.jpg文件
使用c++ +opencv实现,将yuv序列转为.jpg文件保存。# define _CRT_SECURE_NO_WARNINGS#include <string>#include <iostream>#include <fstream>#include <cv.h> #include <highgui.h> #in...原创 2018-09-20 19:40:57 · 7081 阅读 · 1 评论 -
win10+VS2015+opencv3.4.0配置方法
win10+VS2015+opencv3.4.0配置方法操作环境:windows10 64位 opencv 3.4.0:https://opencv.org/releases.html(选择opencv3.4.0 Win pack下载到本地,双击提取即可,不需要编译) visual studio 2015本开发环境配置的一些说明:不需要编译opencv 在visual stud...原创 2018-09-26 14:18:15 · 23539 阅读 · 7 评论 -
opencv Mat类型初始化,遍历,赋值
1.opencv Mat类型定义 cv::Mat a(cv::Size(w,h),CV_8UC1); // 单通道 cv::Mat b = cv::Mat(cv::Size(w,h),CV_8UC3); //3通道每个矩阵元素包含3个uchar值 对于维数较小的Mat类型,直接定义赋值方法如下:Mat mtest = (Mat_<float>(4, 1) &...原创 2018-10-16 10:53:33 · 34253 阅读 · 0 评论 -
opencv将灰度图转为彩色图
使用opencv将一幅灰度图转为彩色图。使用函数:cvtColor(); Mat imgGray= imread("gray.jpg",0); Mat imgRGB; cvtColor(imgGray, imgRGB, COLOR_GRAY2RGB);说明:输入图像gray.jpg是单通道,8bit图像。 如此简单的过程,还折腾了一会,主要原因是:刚开...原创 2018-11-02 16:54:23 · 55573 阅读 · 15 评论 -
opencv在图像上根据顶点绘制直线
知道图像中的四个顶点,绘制四个顶点构成的四边形。如果想绘制图像上原有的点,添加drawContours()函数。 Mat imageContoursnew = Mat::zeros(edge.size(), CV_8UC1); //drawContours(imageContoursnew, aglcontours, 0, Scalar(255), 1, 8);/...原创 2018-11-08 09:59:24 · 3295 阅读 · 0 评论 -
opencv求最小外接矩阵
求最小外接矩阵的基本原理:获取点簇最开始的minx,maxx,miny,maxy确定最初的外接矩形,求外接矩形的面积,然后对点簇进行旋转,按照下面公式即可:旋转之后,求出新的minx,maxx,miny,maxy,计算此时的面积,直到面积达到最小,对应的即为最小外接矩形。关于图像旋转参考:https://blog.csdn.net/zhouxuguang236/article/de...原创 2018-11-08 19:46:40 · 10166 阅读 · 1 评论 -
opencv在图像上画矩形框
实现代码:#include "opencv2/opencv.hpp"using namespace cv;void main(){ Mat src = imread("bird.jpg"); Rect rect(230, 5, 280, 290);//左上坐标(x,y)和矩形的长(x)宽(y) cv::rectangle(src, rect, Scalar(25...原创 2018-11-15 19:18:09 · 48227 阅读 · 2 评论 -
OpenCV中imshow函数的使用
函数功能:在指定窗口中显示图像。函数原型:void imshow(const string& winname, InputArray mat);如果窗口是使用cv::WINDOW_AUTOSIZE标志创建的,则图像显示为其原始大小,但仍受屏幕分辨率的限制。否则,图像将按比例缩放以适合窗口。该函数可以缩放图像,取决于其深度:-如果图像是8位无符号的,它将按原样显示。-如果图像是...原创 2018-11-29 19:14:54 · 6678 阅读 · 0 评论 -
win10+vs2015+CMake 3.12.2编译opencv3.4.0源码
1.为何要编译opencv源码? (1)想查看OpenCV自带的函数的源代码,比如函数cvCreateImage, 点击鼠标右键->转到定义,只能看到cvCreateImage的一个简单声明,而没有源代码。这是因为opencv将很多函数被加入了函数库,并被编译成了dll,所以只能看到函数申明,没法看到源代码。(2)为何需要自行编译opencv3.4.0与opencv_contrib...原创 2018-12-04 17:56:08 · 1556 阅读 · 0 评论 -
OpenCV 中boundingRect、minAreaRect的用法区别
当得到对象轮廓后,可用boundingRect()得到包覆此轮廓的最小正矩形,minAreaRect()得到包覆轮廓的最小斜矩形。1)Rect boundingRect(InputArray points)points:输入信息,可以为包含点的容器(vector)或是Mat。返回包覆输入信息的最小正矩形。如下图: 2)RotatedRect minAreaRect(InputAr...原创 2018-11-27 11:49:59 · 57233 阅读 · 0 评论 -
OpenCV的矩阵操作
opencv中矩阵的基本操作:拷贝,转换,改变尺寸,创建矩阵头,局部提取,反转,分解合并通道,其他一些数学相关的操作。cv::Mat src,dst,m;1)src.copyTo(dst)把src矩阵中的数据拷贝到dst。2)m.clone()深度拷贝。3)src.convertTo(dst, type, scale, shift)缩放并转换到另外一种数据类型:ds...原创 2018-12-01 14:16:57 · 406 阅读 · 0 评论 -
opencv中Mat类型转换
1.Mat不同数据类型之间的转换缩放并转换到另外一种数据类型。如果输入数组与输出数组的类型相同,则函数可以被用于缩放和平移矩阵或图像。主要函数:convertTo()函数原型:Mat::convertTo(OutputArray _dst, int _type, double alpha, double beta)参数解释: _dst:目的矩阵...原创 2018-12-01 15:55:35 · 9687 阅读 · 0 评论 -
安装opencv+VS开发环境配置
首先安装VS20101.下载和安装OpenCV SDK在官网:http://opencv.org/上找到OpenCV windows版下载下来。本文下载的版本是opencv-2.4.6.exe。下载完后得到文件OpenCV 2.4.X,双击后会提示解压到某个地方,本文放到D:\OpenCV\下,比如D:\OpenCV,(因为OpenCV项目文件打包的时候,根目录原创 2016-02-29 15:45:14 · 685 阅读 · 0 评论