OpenCV

哈哈哈哈哈哈镜~

你。 提交于 2021-01-14 08:02:15
欢迎关注【 Opencv视觉实践 】 我绝对是无聊爆炸了,所以我又丧心病狂处理二次元图片了。 今天基于像素变换来实现图像的哈哈镜变换,效果就是下面这样了: 哈哈镜分两种,一种是挤压,一种是放大。分别对应凹函数和凸函数。 输入一副图像,首先设置缩放中心center,我们取原图鼻子处为中心。 设置图像上任意一点到中心点的相对坐标tx= x-cx,ty=y-cy。 左边为挤压哈哈镜,对应像素映射函数: //变换后新的坐标 x = cos ( atan2 (ty , tx))* 12 *( sqrt (tx*tx + ty*ty))+cx y = sin ( atan2 (ty , tx))* 12 *( sqrt (tx*tx + ty*ty))+cy 公式中的常数12代表强度,越大则图像越扭曲。 自定义挤压函数(C++版)(Python版可以点击文末阅读原文查看): Mat MinFrame (Mat frame) { Mat srcImage; frame.copyTo(srcImage); int radius = 400 ; //定义哈哈镜的半径 int height = frame.rows; int width = frame.cols; //图片的长宽 Point2d center; //人脸中心 center.x = 130 ; center.y = 180 ; int

OpenCV3入门(五)图像的阈值

孤街浪徒 提交于 2021-01-14 07:52:29
1 、图像阈值与二值化 阈值是一种简单的图像分割方法,一幅图像包括目标物体(前景)、背景还有噪声,要想从数字图像中直接提取出目标物体,可以设定一个像素值即阈值,然后用图像的每一个像素点和阈值做比较,给出判定结果。 二值化是特殊的阈值分割方法,把图像分为两部分,以阈值T为分割线,大于T的像素群和小于T的像素群,这样图像就变为黑白二色图像。通过设定一个标准如果大于这个标准就设为白,如果小于这个标准就设为黑,而这个标准就是阈值。 2 、OpenCV 阈值threshold double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type); (1)第一个参数,InputArray 类型的 src,源图像。单通道,8 或 32位浮点数类型的深度。 (2)第二个参数,OutputArray 类型的 dst,输出图像。 (3)第三个参数,double 类型的 thresh,选取的阈值。 (4)第四个参数,double 类型的 maxval。 (5)第五个参数,int 类型的 type。阈值类型。如下所示: type类型如下: enum cv::ThresholdTypes { cv::THRESH_BINARY = 0 , cv::THRESH_BINARY_INV = 1 , cv

OpenCV图像数字化

本秂侑毒 提交于 2021-01-14 06:56:38
##灰度图像数字化## 我们平时使用PS或者其它图像处理的软件打开一个要处理的图像,当我们将图像放大的足够大的时候我们会发现很多个灰度程度不同的小方格,其中每个方格就相当于一个像素,水平方向的方格数代表这个图像的像素宽度(通常在图像的属性信息中可以查看到图像以像素为单位的宽度),同样垂直方向上的方格的个数代表图像的像素高度。计算机会将每个方格化为一个数值- “位深度”,是将一个方格化为[0,255]之间的一个uchar类型的数字,用256个数来表示灰度的深浅(0代表黑色,256代表白色),值越小越灰,反之越大越接近白色,就越亮。总之对于计算机数字图像的处理就是对图像矩阵的操作。 利用imread的Python API ,可以将灰度图像转化成都ndarry类型,实例如下: import cv2 import numpy as np #读入原始图像 img=cv2.imread('j1.jpg',cv2.IMREAD_GRAYSCALE) #灰度化处理 cv2.imshow("1",img); cv2.waitKey(0) 运行结果: imread的参数说明:OpenCV2.x和OpenCV3.x的语法不同(我已经抛弃2.x了,所有实例均以OpenCV3.x版本为例),在OpenCV3.x版本中对应的参数是 参数 OpenCV3.x的解释 filename 图像的文件名,可以包含路径

TensorFlow C++接口编译和使用

风流意气都作罢 提交于 2021-01-13 20:01:55
部分内容from: Tensorflow C++ 从训练到部署(1):环境搭建 在之前的编译中,已经编译好了tensorflow_pkg相关的wheel。现在有一个需求,需要按照C++的代码进行模型加载和训练。查询资料后发现,需要重新编译一套TensorFlow支持的C++接口,主要是编译出来libtensorflow_cc.so和libtensorflow_framework.so这两个文件。 bazel build -c opt --copt=-mavx --copt=-msse4.2 --config=monolithic // tensorflow:libtensorflow_cc.so bazel build -c opt --copt=-mavx --copt=-msse4.2 --config=monolithic // tensorflow:libtensorflow_framework.so 像这种严格与机器相关的选项,虽然可以加快执行速度,但是在使用之前一定要查明自己的目标机器是否适合。 中间可能会遇到之前的一些问题,功查找https://www.cnblogs.com/jourluohua/p/9180709.html 编译完成后,安装第三方库 source tensorflow/contrib/makefile/build_all_linux. sh 若出现

三维目标识别算法综述

感情迁移 提交于 2021-01-13 18:46:54
点击上方“ 3D视觉工坊 ”,选择“星标” 干货第一时间送达 目前三维点云数据的获取方法相对快捷,同时三维点云数据的采集不受光照影响,也规避了二维图像遇到的光照、姿态等问题,因此基于点云数据的三维物体识别也引起了人们的重视。 三维点云物体识别方法多是通过提取物体的特征点几何属性、形状属性、结构属性或者多种属性的组合等特征进行比对、学习,从而完成物体的识别与分类。可以分为以下四类方法: 1.基于局部特征的目标识别 基于局部特征的物体识别方法主要是通过局部来识别整体。该方法无需对处理数据进行分割,往往通过提取物体的关键点、边缘或者面片等局部特征并进行比对来完成物体的识别。其中,特征提取是物体识别中非常关键的一步,它将直接影响到物体识别系统的性能。基于局部特征的方式对噪声和遮挡有更好的鲁棒性,同时不受颜色和纹理信息缺乏的限制。由于局部特征描述子仅使用参考点邻域信息,所以不对场景进行分割即可处理复杂场景。但是局部特征描述子维度较高,需要消耗更多的内存,同时存在计算复杂度高,实时性差等问题。 点特征直方图(PFH)和快速点特征直方图(FPFH)是Rusu R B等人提出的相对早期的局部特征描述子。采用统计临近点对夹角的方式构造特征描述子,这也是局部特征描述子构造的典型方式,在此基础上形成了基于局部特征匹配的目标识别和位姿估计的经典框架,如下图所示。表1对典型的局部三维描述符进行了总结

OpenCV (二)掩膜操作

自作多情 提交于 2021-01-13 15:25:26
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; int main(int argc, char** argv) { Mat src, dst; src = imread("D:/OpenCVtest/image/hao.jpg"); if (!src.data) {   printf("could not load image...\n");   return -1; } namedWindow("input image", CV_WINDOW_AUTOSIZE); imshow("input image", src); /* int cols = (src.cols-1) * src.channels(); int offsetx = src.channels(); int rows = src.rows; dst = Mat::zeros(src.size(), src.type()); for (int row = 1; row < (rows - 1); row++) {    const uchar* previous = src.ptr<uchar>(row - 1);   const uchar* current = src.ptr

opencv的掩膜案例

时光总嘲笑我的痴心妄想 提交于 2021-01-13 15:25:13
cv::inRange(src, lowerb, upperb, dst) cv::bitwise_and(src1, src2, dst, mask) dst = src1 & src2 mask:为掩膜 与运算:和1与,数据不变,和0与,结果为0(RGB中黑色=0;) #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main() { Mat src = imread("E:/LYPOpenCV3/JZG/ZGimg/person.jpg"); if (src.empty()){ printf("could not load image...\n"); return -1; } namedWindow("input image", CV_WINDOW_AUTOSIZE); //imshow("input image", src); Mat hsvimg; cvtColor(src, hsvimg, COLOR_BGR2HSV); //imshow("hsv", hsvimg); Mat maskimg, maskimg_not, people; inRange(hsvimg, Scalar(35, 43, 46), Scalar(77,

opencv学习笔记(三)-- 矩阵的掩膜操作

前提是你 提交于 2021-01-13 12:43:22
矩阵的掩膜操作 图像的通道 掩膜 1.掩膜的定义 2.利用掩膜提高图像的对比度 opencv实现掩膜操作 1.opencv对图像像素的处理 用到的函数 (1)、CV_Assert(myImage.depth() == CV_8U) (2)、Mat.ptr(int i=0) (3)、saturate_cast()处理像素值的范围 (4)、setTo() 代码实现(带注释) 2、函数调用-filter2D功能 (1)定义掩膜矩阵 (2)调用filter2D()函数 完整代码(详细注释) 图像的通道 图像的通道就是把图像分解成一个或多个颜色成分,常见的有单通道,三通道和四通道 单通道:灰度图像,一个像素点只需要一个数值即可表示,0-255(0为黑色,255为白色) 三通道:RGB图像,为红绿蓝三种颜色通道的叠加,三个通道缺一不可。每个通道由0-255的数值表示,当使用矩阵表示三个通道时,三个通道是并列表示的,所以rgb的图像矩阵列数为单个通道的列数乘以通道数。 四通道:在三通道的基础上加上了透明度(0是完全透明,255是完全不透明) 掩膜 1.掩膜的定义 掩模(Mask)是由0和1组成的一个二进制图像。当在某一功能中应用掩模时,1值区域被处理,被屏蔽的0值区域不被包括在计算中。通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模

基于三维模型的目标识别和分割在杂乱的场景中的应用

大兔子大兔子 提交于 2021-01-13 07:19:12
点击上方“ 3D视觉工坊 ”,选择“星标” 干货第一时间送达 在杂波和遮挡情况下,对自由形式物体的识别及分割是一项具有挑战性的任务。本文提出了一种新的基于三维模型的算法,该算法可以有效地执行该任务,对象的三维模型是从其多个无序范围图像离线自动构建的,这些视图被转换为多维,用张量表示,通过使用基于哈希表的投票方案将视图的张量与其余视图的张量匹配,这些视图之间自动建立对应关系,形成一个相对转换图,用于将视图集成到无缝3D模型之前注册视图,该模型及其张量表示构成了模型库。在在线识别过程中,通过投票场景中的张量与库中的张量同时匹配,对于得票最多的模型张量并计算相似性度量,进而被转换为场景,如果它与场景中的对象精确对齐,则该对象被声明为识别和分割。这个过程被重复,直到场景完全分割。与自旋图像的比较表明,本文算法在识别率和效率方面都是优越的。 1.算法框图 (1) 离线三维建模 本文对多维视图对应算法使用4d散列表来执行一组对应搜索,如上图中的模块B和C,自动建立自由形式对象的无序2.5d视图之间的对应关系,结果是无序视图之间的相对转换的生成树,用于在基坐标系下粗略地对它们进行配准,使用多视图精细配准(模块D)对配准进行细化,然后将视图集成并重建为无缝三维模型(模块E)。 (2)在线识别与分割 场景的点云被转换成三角形网格,由于性能原因而被抽取。接下来,从这个网格中随机选择一对顶点来构造张量

【可以玩的】人脸检测 & 人脸关键点检测 & 人脸卡通化

孤者浪人 提交于 2021-01-13 06:47:54
人脸检测历险记 可能跟我一样,人脸检测是很多人学习图像处理的第一个自驱动型的任务,OpenCV刚上手没几天可能就想先跑一跑人脸检测,然后一个坑接着一个坑的往里跳。我个人对人脸检测的大概历程应该是下面这样的: 找一个直接能执行的 OpenCV 的人脸检测程序,直接执行看效果。虽然这貌似是最简单的一步,但是由于最初水平实在太低,所以这一步可能是耗时最长的。当时初学的时候还在用 C++ ,想要直接跑程序,首先你要先配置好环境!曾经因为环境问题尝试了不同版本 OpenCV 未果、重装 VS 未果、重装 Windows 系统仍未果...当年的环境配置简直是不堪回首,说多了都是泪。而且根据我的经验,不论是因为版本还是还是系统问题,在网上找一个直接拿来就能跑的代码实在是太难了... 按照千辛万苦跑起来的程序,自己敲一遍。明明感觉没啥差别,为啥就是跑不起来呢...所有的坑都会自己跳进去,所有的低级错误都会犯不止一遍。 尝试找数据或者标注数据,尝试自己训练一个人脸检测模型, OpenCV 提供了用来训练的 exe ,参数超多,一直感觉很难用...当时可谓是屡败屡战,屡战屡败。 找一个能直接执行的深度学习的人脸检测程序,直接执行看效果。(虽然这貌似是最简单的一步,但是由于最初水平实在太低,所以这一步可能是耗时最长的。当时初学的时候还在用 Caffe ,想要直接跑程序,首先你要先配置好环境! Caffe