图像处理
文章平均质量分 56
andylan_zy
这个作者很懒,什么都没留下…
展开
-
图像识别的基本原理
1.图像的组成:图像由什么组成的,这个问题不是通常意义上的概念,它不是指图片里面有什么我们可以看到的东西,而是图像的光学组成概念。即图像是由很多具备色彩种类、亮度等级等信息的基本像素点所组成的。2.图像的识别:计算机初始状态只能识别像素点上的基本信息,这个和生物的视觉是一样的,生物之所以可以分辨物体是由于生物神经系统对原始图像处理后的结果。而计算机的图像识别也是一个将原始光学信息进转载 2017-06-21 20:21:25 · 27731 阅读 · 0 评论 -
soble算子
代码示例:#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace cv;int main(int argc, char** argv) { Mat src, dst; src = imread("D:/vcprojects/images/tes...原创 2018-06-10 17:50:07 · 562 阅读 · 0 评论 -
Laplacian算子
Mat src, dst; src = imread("D:/vcprojects/images/lena.png"); if (!src.data) { printf("could not load image"); } char input_title[] = "input image"; char output_title[] = "Laplaiance Res...原创 2018-06-10 20:10:16 · 5452 阅读 · 0 评论 -
Canny算子
代码示例:#include <opencv2/opencv.hpp>#include <iostream>#include <math.h>using namespace cv;Mat src, gray_src, dst;int t1_value = 50;int max_value = 255;const char* OUTPUT_TITLE...原创 2018-06-10 22:33:50 · 727 阅读 · 0 评论 -
使用opencv函数inPaint()人像去痣
#include "opencv2/highgui.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/photo.hpp"#include<iostream>using namespace std;using namespace cv;#define WINDOW_NAME1 "原始图" Mat imgSrc,...原创 2018-07-15 21:18:15 · 3548 阅读 · 2 评论 -
用滑动条来简化canny阈值参数调节
写程序用canny做边缘检测时调参数很麻烦,做个滑动条来节省人力#include<iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;Mat src,dst;#define WINDOW_NAME "canny"int g_nThreash=30;int g_nM...原创 2018-08-02 20:15:28 · 1897 阅读 · 0 评论 -
通过轮廓分析做表格拆分
先上一张图:像上面这张图是拍照图片,由于拍照图片不像扫描图片那样线条是直的,用线条来切割应该是行不通的。分析表格特征:是由多个矩形框组成的,每个矩形框都是一个单独的轮廓 。下面尝试用轮廓分析来拆分这张表格,上代码:Mat src = imread("F:/TestImg/table1.jpg",0); if (src.empty()) { cout <&l...原创 2018-10-24 17:33:32 · 710 阅读 · 0 评论 -
MFC显示Mat图像
先设计界面如下:设置属性: Type可以设置为: Frame 或 Rectangle配置好opencv的头文件和库后,并添加<string>头文件,以及命名空间:#include "opencv2/opencv.hpp"#include <string>using namespace std;using namespace cv; ...原创 2018-11-01 14:58:39 · 3329 阅读 · 1 评论 -
获取图片DPI
最近在项目中有个需求:区分拍照图片与扫描图片。找不到什么好的方法,目前感觉可行的方式是通过DPI来区分:一般拍照图片DPI是96甚至更低,扫描图片DPI一般是120、150、200、300等更高。 但是opencv没有获取DPI相关的函数,遍寻百度,觉得还是GDI+实现起来较好。 GDI+的头文件和库,在windows系统中是自带的。先要引入GDI+的头文件和库#in...原创 2018-11-07 11:47:46 · 5771 阅读 · 0 评论 -
opencv4+contrib 编译
先看看opencv4的新特性吧!1.OpenCV 最开始开发时的语言是 C,许多模块无法利用 C++ 11 的良好特性,所以自OpenCV1.x以来许多C风格的API就被干掉啦。历史好像就是这样,前浪总归是要···所以,学习OpenCV,最佳就是从最新的版本开始会比较好。2.在 core 模块中的持久化(在 XML,YAML 或 JSON 中存储和加载结构化数据)已完全用 C ++ 重新实...原创 2018-11-23 22:20:31 · 12597 阅读 · 7 评论 -
opencv双滑动条
在自适应二值化的时候,两个参数调试很麻烦。用双滑动条来简化调试过程。#include<iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;#define WINDOW_NAME "自适应效果"Mat g_imgGray,g_imgBin;int g_nBlockS...原创 2018-07-24 11:25:54 · 1194 阅读 · 0 评论 -
opencv图片旋转90°/-90°/180°
一般角度旋转,我们会这样做:先用getRotationMatrix2D()来计算二维旋转变换矩阵,再用warpAffine()来进行仿射变换对于需90°或-90°旋转,如果我们也这样做: Mat src = imread("E:/TestImg/t1.jpg"); Mat dst; Point center(src.cols/2,src.rows/2); //旋转中心...原创 2018-12-06 18:25:47 · 31866 阅读 · 5 评论 -
求轮廓最大内切圆
void FindInnerCircleInContour(vector<Point> contour,Point ¢er,int &radius){ Rect r = boundingRect(contour); int nL = r.x, nR = r.br().x; //轮廓左右边界 int nT = r.y, nB = r.br().y; /...原创 2019-04-26 16:46:32 · 3605 阅读 · 3 评论 -
图像简单拼接
近日在做一个圆形印章的识别,检测到印章如下:每个字单独旋转矫正后(每个字图像大小与原图一致):最后想简单的将这几个字的图像合并到一张图像,想到2种方案:1.建一个新图,高与小图一致,宽为小图9倍,然后每个小图复制到对应区域2.stitch来图像拼接,考虑到效率问题(特征点计算很费时,没必要计算特征),舍弃第一种方案感觉还是有点复杂,还有没有简单的方式?万能的百...原创 2019-04-30 10:59:43 · 712 阅读 · 0 评论 -
二维码检测
首先用形态学去膨胀整图,使二维码成为一个黑块,定位出这个正方形即获得二维码大致位置。二维码的三个角都有2个嵌套关系的矩形,以下根据轮廓嵌套关系去定位这3个点:Mat imgSrc=imread("qrcode.jpg");if(imgSrc.empty()){ cout<<"Load image error!!!"<<endl; return...原创 2019-05-06 15:20:35 · 3071 阅读 · 1 评论 -
详解掩膜mask及不规则mask应用
部分引用自:https://www.cnblogs.com/skyfsm/p/6894685.html在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?mask经常应用于:原图(src)与掩膜(mask)进行与运算后得到了结果图(dst)。何为图与掩膜的与运算?其实就是原图中的每个像素和掩膜中的每个对应像素进行与运算。比如1 ...原创 2019-08-02 15:38:36 · 2810 阅读 · 0 评论 -
图像编码与解码
在很多应用中,经常会直接把图片的二进制数据进行交换,比如说利用 socket 通信传送图片二进制数据,或者直接用内存数据库(例如 Redis)来传递图片二进制数据。这个时候,当你的应用程序读到内存里的二进制图片数据时,需要用 imdecode 这个函数:即先构造一个 char 字符串序列的 vector,用来存储图片的二进制数据,然后再转为 Mat。同样...原创 2018-06-13 17:46:41 · 9208 阅读 · 2 评论 -
获取前景像素点的包围矩形
vector<Point> vecPoints(imgBin.cols*imgBin.rows); //imgBin是背景为黑色的图像findNonZero(imgBin, vecPoints); //查找非零像素的点(前景点),保存到vecPoints中RotatedRect rRect = minAreaRect(Mat(vecPoints)); //获取前景点最小...原创 2018-06-06 14:33:47 · 620 阅读 · 0 评论 -
图像采集
随着计算机软件、硬件技术的日新月异的发展和普及,人类已经进入一个高速发展的信息化时代,人类大概有80%的信息来自图像,科学研究、技术应用中图像处理技术越来越成为不可缺少的手段。图像处理所涉及的领域有军事应用、医学诊断、工业监控、物体的自动分检识别系统等等,这些系统无不需要计算机提供实时动态,效果逼真的图像。 基于图像采集卡的视频图像处理系统 计算机图像处理系统从系统层次上可分为高、中、转载 2017-06-23 08:41:26 · 728 阅读 · 0 评论 -
图像处理基础知识
一.BMP图片格式定义BMP文件格式是Windows操作系统推荐和支持的标准图像文件格式,是一种将内存或显示器的图像数据不经过压缩而直接按位存盘的文件格式,故称位图(bitmap),其扩展名为BMP.BMP图像通常有4个部分组成:位图文件头、位图信息头、颜色表、位图数据.如下图所示:第一部分为位图文件头BITMAPFILEHEADER.位图文件头结构长度固定为14个字节,包含文件的类型转载 2017-06-24 09:52:49 · 567 阅读 · 0 评论 -
hog特征提取
1 什么是hog特征hog特征是histogram of gradient的缩写。我们观察图像时,信息更多来自目标边沿的突变。我们计算一块区域内的所有像素处的梯度信息,即突变的方向和大小,然后对360度进行划分,得到多个bin,统计该区域内的所有像素所在的bin,就得到了一个histogram。这就是hog特征。2 hog特征的提取方法2.1 将彩色图像转换为灰度图像2.2 Gam转载 2017-09-23 15:53:50 · 658 阅读 · 0 评论 -
直方图均衡化的原理及C++实现
直方图均衡化的作用是图像增强。有两个问题比较难懂,一是为什么要选用累积分布函数,二是为什么使用累积分布函数处理后像素值会均匀分布。第一个问题。均衡化过程中,必须要保证两个条件:①像素无论怎么映射,一定要保证原来的大小关系不变,较亮的区域,依旧是较亮的,较暗依旧暗,只是对比度增大,绝对不能明暗颠倒;②如果是八位图像,那么像素映射函数的值域应在0和255之间的,不能越界。综合以上两个条转载 2017-09-18 21:57:54 · 6854 阅读 · 2 评论 -
迭代阀值
///***************************************************************/ /*函数名称:Diedaifazhi(int *tongji) /*函数类型:void/*参数说明:tonji ---直方图灰度值统计原创 2017-09-21 16:25:27 · 1040 阅读 · 5 评论 -
轮廓提取
//***************************************************************/ /*函数名称:Lunkuotiqu() /*函数类型:void /*功能:对图像进行轮廓提取。原创 2017-09-21 18:57:53 · 527 阅读 · 0 评论 -
访问图像数据
图像每行字节数的计算 利用宏:#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4) bmp文件的数据块部分不是直接的一个个像素排列后存储。为了要保证每行的字节数都能够被4整除,往往要在每行数据后面补充1,2或3个字节的冗余信息。 X*Y大小的24位bmp图像,每个像素占3个字节,如果X*3后不能够被4整除,则每行有可能是X*3+1, X*3转载 2017-06-29 22:11:05 · 320 阅读 · 0 评论 -
opencv简单配置
1.库文件等放置:A. 包含36个*.lib文件的lib文件夹放在工程文件同一目录B. opencv_core249d.dll;opencv_highgui249d.dll;opencv_imgproc249d.dll放在Debug或Release文件夹下C. opencv和opencv2文件夹放在源文件同一目录下 2.项目配置A. 链接器->常规->...原创 2017-10-21 10:43:42 · 335 阅读 · 0 评论 -
opencv常用函数
1.创建Mat Mat matSrc (Size(320,240),CV_8UC3) ;2.读取Mat图像 Mat matSrc = imread("C:\\Tmp.jpg"); if( matSrc.empty()) { return FALSE; }3.读取单通道图像 Mat matSrc =转载 2017-10-30 09:40:11 · 405 阅读 · 0 评论 -
形态学操作
腐蚀:完全重合时中心点保留,否则删除 膨胀:结构元素与目标物体有一个像素相交就保留。原创 2018-01-20 22:26:39 · 243 阅读 · 0 评论 -
OpenCV中的CvSVM使用方法
转自:https://blog.csdn.net/armily/article/details/8483098描述:opecv的线性分类器SVM使用简洁高效,这里列出其使用方法1)设置训练样本集需要两组数据,一组是数据的类别,一组是数据的向量信息。2)设置SVM参数利用CvSVMParams类实现类内的成员变量的表示3)训练SVM调用CvSVM::train函数建立SVM模型,第一个参数为训练数据...转载 2018-05-25 10:34:57 · 4284 阅读 · 0 评论 -
opencv 图片高质量保存
转自:https://blog.csdn.net/u012456019/article/details/80442072通过翻阅资料,有些图片格式是自带压缩的,比如jpg格式,而bmp格式的图片是不带任何压缩。 BMP格式(无压缩) 位图(外语简称:BMP、外语全称:BitMaP)BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,...转载 2018-05-25 14:38:49 · 1069 阅读 · 0 评论 -
霍夫直线
示例代码: Mat src, src_gray, dst; src = imread("D:/vcprojects/images/lines.png"); if (!src.data) { printf("could not load image...\n"); return -1; } char INPUT_TITLE[] = "input im...原创 2018-06-11 22:56:30 · 231 阅读 · 0 评论 -
霍夫圆
Mat src, dst; src = imread("D:/vcprojects/images/circle.png"); if (!src.data) { printf("could not load image...\n"); return -1; } char INPUT_TITLE[] = "input image"; char OUTPUT...原创 2018-06-12 22:22:13 · 1512 阅读 · 0 评论