图形视频

图像分割算法的优缺点比较

本文章只做简单介绍各个分割方法,后续会对各个方法一一做详细介绍 数字图像处理常用的图像分割算法有: 基于阀值的分割方法。 基于边缘的分割方法。 基于区域的分割方法。 基于聚类分析的图像分割方法。 基于小波变换的分割方法。 基于数学形态学方法。 基于人工神经网络的方法。 基于遗传算法的方法。 阈值分割 1、原理 用一个或几个阈值将图像的灰度直方图分成几个类, 认为图像中灰度 值在同一类中的像素属于同一物体。(常用的二值分割) 2、优点 直接利用图像的灰度特性,所以计算简单、运算效率较高、速度快。 3、适用范围 相差很大的不同目标和背景能进行有效的分割。 4、缺点 对噪声敏感,对灰度差异不明显以及不同目标灰度值有重叠分割不明显,所以需要与其他方法进行结合。合适的阈值查找。 边缘分割 1、原理 通常不同的区域之间的边缘上像素灰度值的变化往往比较剧烈, 这是边缘检测方法得以实现的主要假设之一。常用灰度的一阶或二阶微分算子进行边缘检测。 2、优点 搜索检测的速度快,对边缘检测好。 3、适用范围 低噪声干扰,区域之间的性质差别很大(或则说边缘变化大)。 4、缺点 不能得到较好的区域结构,边缘检测时抗噪性和检测精度之间的矛盾。精度提高,则会牺牲抗噪性,反之。我们可以设置一个熵,取一个折中的办法,求取熵最大的时候的精度和抗噪性。 区域分割 1、原理 把具有某种相似性质的像索连通,从而构成最终的分割区域。它采用两种方法:分裂和合并 2、优点 有效地克服其他方法存在的图像分割空间小连续的缺点,有较好的区域特征。 3、适用范围 需得到具有区域结构的分割图。 4、缺点 容易造成图像的过度分割,将边缘检测与区域分割结合,可以得到良好的分割效果。 聚类分析的图像分割 1、原理 将图像空间中的像素用对应的特征空间点表示,根据它们在特征空间的聚集对特征空间进行分割,然后将它们映射回原图像空间,得到分割结果。它采用两种方法:K 均值、模糊 C 均值聚类(FCM)算法 2、优点 且 FCM 算法对初始参数极为敏感,有时需要人工干预参数的初始化以接近全局最优解,提高分割速度。 3、适用范围 适合图像中存在不确定性和模糊性。 4、缺点 传统 FCM 算法没有考虑空间信息,对噪声和灰度不均匀敏感。 聚类分析所要做的工作。 (1)、聚类的类数如何确定。 (2)、怎样确定聚类的有效性准则。 (3)、聚类中心的位置和特性事先不清楚时, 如何设置初始值。 (4)、运算的开销。 小波变换的分割 1、原理 将基于小波变换的阈值图像分割方法的基本思想是,首先由二进小波变换将图像的直方图分解为不同层次的小波系数,然后依据给定的分割准则和小波系数选择阈值门限,最后利用阈值标出图像分割的区域。 2、优点 空域和频域的局域变换,因而能有效地从信号中提取信息,通过伸缩和平移等运算功能对函数或信号进行多尺度分析,解决了傅立叶变换不能解决的许多问题。由于是频域操作,所以对噪声不敏感。 3、适用范围 用于边缘检测,可提取多尺度边缘,并可通过对图像奇异度的计算和估计来区分一些边缘的类型。

ps高低频磨皮详细教学

很多同学都知道高低频磨皮,其实高低频不仅可以用来磨皮肤,还可以用来磨头发,磨衣物上的褶皱等。操作方法有多种,但原理都一样,都是通过融合颜色及明暗对比再提取纹理达到一个降低反差并保留纹理的磨皮效果。所谓高低频,就是使用两个图层以不同的方式提取图像中的信息,这两个图层一个叫低频层一个叫高频层。这里给大家演示一下常用的三种操作方法。 第一种: 复制两个原图-下方图层进行表面模糊(菜单栏滤镜-模糊-表面模糊,也可以用高斯模糊)-根据需要的融合效果设置半径与阈值(半径可以理解为力度,阈值可以理解为范围)-此层作为低频层。 上方图层进行反相(Ctrl+I)-将不透明度改为50%。 3.合并可见图层作为高频层-关闭下方两个图层的可见性或直接删除-将高频层的混合模式改为线性光-进行表面模糊(参数需小于低频层的2~5倍) 好了,放大看下对比效果: 下面演示一下第二种操作方法,与第一种的原理及效果相同,只是操作方式有点区别。这次我们用高斯模糊代替表面模糊,两者只是模糊方式不同,不在所包括的操作方法内。 第二种: 还是复制两个图层-下方图层进行高斯模糊(菜单栏滤镜-模糊-高斯模糊,也可以用表面模糊)-半径设置到看不清瑕疵确仍有轮廓为止-此层为低频层。 上方图层应用低频层混合模式减去缩放2补偿值128(菜单栏图像-应用图像)-此层作为高频层。 3.高频层进行高斯模糊(理论上模糊的参数需要与低频层相同以最大程度的保留纹理,但也可以根据效果稍微小一点以增加力度)-混合模式改为线性光。 好了,这是两种操作方法,这两种比较繁琐,磨皮的力度较小,所保留的纹理较多,适合磨皮肤。 下面我们演示第三种较快捷的方法,这种磨皮的力度较大,所保留的纹理较少,适合磨头发、褶皱等。这次我们用头发来做演示,当然如果对皮肤质感要求不高的话也可以用于皮肤。 第三种: 先看下原图: 复制一个图层反相-混合模式线性光。 高反差保留(滤镜-其它-高反差保留)-参数设置到反差较明显的光影平整了即可。 高斯模糊(理论上模糊的参数需要与高反差保留的参数相同,但这里稍微小一点以增加力度)。注:磨头发及褶皱时不能用表面模糊。 好了,第三种就完成了。放大看下对比效果: 当然,磨完以后要建个蒙版擦一下不需要的部分,这个就不多说了。 但可能有些同学会觉得这个头发看上去不够光滑,下面我们稍微调整一下,在不影响头发磨皮效果的前提下增强下对比。 调整步骤: 建个曲线蒙版应用高光-调整蒙版增强对比(选中蒙版-菜单栏图像-调整-曲线)-蒙版进行高斯模糊(参数宁小不大)-回到曲线提亮高光。 再建一个曲线蒙版应用上个曲线的反相蒙版(选中上个曲线的蒙版后按住Alt键拖移至这个曲线的蒙版上,然后Ctrl+I反相。当然你也可以重新应用阴影再进行一次高斯模糊)-回到曲线降暗阴影。 最后别忘了将两个曲线建个组加个蒙版擦一下。 欢迎大家一起学习交流 Q:673187073 

食品网页色彩和风格的讲解

食品网页色彩和风格的讲解 (撰写时间:5月6日 作者:李梦熙) 首先来看看讲解的第一个网页: 这个网页的风格是利用插画来装饰整个页面,让整个页面丰富活跃起来,插画风格的网页会让内容更加的突出,让整个画面有种生动的感觉,就是内容过于太少,让用户无法了解更多的内容;色彩搭配它采用黑色作底色,用白色手绘图案作装饰和内容,还有就是用一些实体物品用插画的方式来点缀整个画面,这种小清新的设计很有新意。 下面的也是一个披萨网页,但和上面的插画风格完全不一样,它是采用图片做一些效果来当做背景,然后在图片的上方放一些介绍,比如这个食物的历史或由来和食物介绍、食物价格等。 每两个图片的中间都有白底隔开,在白底上放置一些菜品,和介绍,但是这个网页也用了插画,虽然不是用的很多,但是展现和别的网页有不一样的风格,黑白版块的插入突出里面的主要内容,让用户可以更好的了解本页面的内容。色彩搭配让人感觉很舒服,用黑白做主题色、利用酒红做点缀色。 下面的那个网页是有一半展示一半网页,网页采用的颜色搭配是黑绿搭配,这种颜色搭配很少见,但它搭配出来的效果还是挺好看的,上面做了个展示,把页面更好的展示出来,让用户直观的了解整个页面,网页的内容是以居中排版为主,用印花水墨嵌入背景来做背景的点缀,这个网页使用黑、绿色搭配,让整个画面都有一种清新的感觉。 风格有点像水墨画的风格。

opengl学习笔记

一、绘制方式。 绘制方式 方式 说明 网格线绘图方式(wireframe) 这种方式仅绘制三维物体的网格轮廓线 深度优先网格线绘图方式(depth_cued) 用网格线方式绘图,增加模拟人眼看物体一样,远处的物体比近处的物体要暗一些。 反走样网格线绘图方式(antialiased) 用网格线方式绘图,绘图时采用反走样技术以减少图形线条的参差不齐。 平面消隐绘图方式(flat_shade) 对模型的隐藏面进行消隐,对模型的平面单元按光照程度进行着色但不进行光滑处理。 光滑消隐绘图方式(smooth_shade) 对模型进行消隐按光照渲染着色的过程中再进行光滑处理,这种方式更接近于现实。 加阴影和纹理的绘图方式(shadows、textures) 在模型表面贴上纹理甚至于加上光照阴影,使得三维景观像照片一样。 运动模糊的绘图方式(motion_blured) 模拟物体运动时人眼观察所感觉的动感现象。 大气环境效果(atmosphere_effects) 在三维景观中加入如雾等大气环境效果。 深度域效果(depth_effects) 类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。 二、OpenGL核心库 1、基本图元 几何图元类型和说明 类型 说明 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四边形 GL_LINE_STRIP 不闭合折线 GL_LINE_LOOP 闭合折线 GL_TRAINGLE_STRIP 线型连续填充三角形串 GL_TRAINGLE_FAN 扇形连续填充三角形串 GL_QUAD_STRIP 连续填充四边形串 2、调用函数 调用函数 函数 说明 glVertex*() 设置顶点坐标 glColor*() 设置当前颜色 glIndex*() 设置当前颜色表 glNormal*() 设置法向坐标 glEvalCoord*() 产生坐标 glCallList(),glCallLists() 执行显示列表 glTexCoord*() 设置纹理坐标 glEdgeFlag*() 控制边界绘制 glMaterial*() 设置材质 例如绘制一个三角形:

cv2伪彩色applyColorMap()函数

本文主要介绍cv2模块中的伪彩色applyColorMap()函数。 引用自:https://blog.csdn.net/u013381011/article/details/78341861 colormap(色度图) 假设我们想在地图上显示美国不同地区的温度。我们可以把美国地图上的温度数据叠加为灰度图像——较暗的区域代表较冷的温度,更明亮的区域代表较热的区域。这样的表现不仅令人难以置信,而且代表了两个重要的原因。首先,人类视觉系统没有被优化来测量灰度强度的微小变化。我们能更好地感知颜色的变化。第二,我们用不同的颜色代表不同的意思。用蓝色和较温暖的温度用红色表示较冷的温度更有意义。 温度数据只是一个例子,但还有其他几个数据是单值(灰度)的情况,但将其转换为彩色数据以实现可视化是有意义的。用伪彩色更好地显示数据的其他例子是高度、压力、密度、湿度等等。 在OpenCV中使用applycolormap(伪彩色函数) OpenCV的定义12种colormap(色度图),可以应用于灰度图像,使用函数applycolormap产生伪彩色图像。让我们很快看到如何将色度图的一种模式colormap_jet应用到一幅图像中。 下面是示例代码: import cv2 import numpy as np def colormap_name(id): switcher = { 0 : "COLORMAP_AUTUMN", 1 : "COLORMAP_BONE", 2 : "COLORMAP_JET", 3 : "COLORMAP_WINTER", 4 : "COLORMAP_RAINBOW", 5 : "COLORMAP_OCEAN", 6 : "COLORMAP_SUMMER", 7 : "COLORMAP_SPRING", 8 : "COLORMAP_COOL", 9 : "COLORMAP_HSV", 10: "COLORMAP_PINK", 11: "COLORMAP_HOT" } return switcher.get(id, 'NONE') img = cv2.imread('./pluto.jpg', cv2.IMREAD_GRAYSCALE) im_out = np.zeros((600, 800, 3), np.uint8) for i in range(0, 4): for j in range(0, 3): k = i + j * 4 im_color = cv2.

opencv 两路视频 保存avi 输出yuv

opencv版本:3.4.1 编译工具:vs2015 说明: 两路视频:一路为网络摄像头,一路为PC usb摄像头 保存avi:根据条件切换不同视频源保存到同一个avi文件 输出yun:根据条件切换不同视频源,输出yuv作为后续使用。 #include #include #include using namespace cv; using namespace std; int main(int argc, char *argv[]) { VideoCapture videoInput("rtsp://X.X.X.X:554"); VideoCapture videoInput2(0); if (!videoInput.isOpened() || !videoInput2.isOpened()) { return -1; } float fpsInput = 25; //获取帧率 float pauseInput = 1000 / fpsInput; //设置帧间隔 Mat frame; int w = videoInput.get(CV_CAP_PROP_FRAME_WIDTH) >= videoInput2.get(CV_CAP_PROP_FRAME_WIDTH) ? videoInput2.get(CV_CAP_PROP_FRAME_WIDTH) : videoInput.get(CV_CAP_PROP_FRAME_WIDTH); int h = videoInput.get(CV_CAP_PROP_FRAME_HEIGHT) >= videoInput2.get(CV_CAP_PROP_FRAME_HEIGHT) ? videoInput2.get(CV_CAP_PROP_FRAME_HEIGHT) : videoInput.get(CV_CAP_PROP_FRAME_HEIGHT); //Size videoSize = Size(videoInput.

OpenCV—如何将彩色图像分通道输出(4)

附代码如下: import cv2 as cv import numpy as np def ch(): src = cv.imread("D:/matplotlib/0.jpg") h,w,ch = np.shape(src) bgr = cv.split(src) cv.imshow("blue",bgr[0]) cv.imshow("green",bgr[1]) cv.imshow("red",bgr[2]) print(h,w,ch) cv.waitKey(0) cv.destroyAllWindows() ch() 运行效果: 代码解释: import cv2 as cv import numpy as np def ch(): src = cv.imread("D:/matplotlib/0.jpg") h,w,ch = np.shape(src) bgr = cv.split(src) #将彩色图像拆分成单个通道 cv.imshow("blue",bgr[0]) cv.imshow("green",bgr[1]) cv.imshow("red",bgr[2]) #分别显示每个通道的图像 print(h,w,ch) cv.waitKey(0) cv.destroyAllWindows() ch()

【图像处理】一种低光照图像的亮度提升方法(Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images)

【fishing-pan:https://blog.csdn.net/u013921430 转载请注明出处】 前言 在实际的拍照过程中,常常会遇到,光线不足的情况。这时候单反用户一般会调大感光度,调大光圈,以让照片整体更清晰,更亮。那么如果照片已经被拍的很暗了,怎么办呢?这时候我们可以利用算法来提升图像整体的光照情况,让图像更清晰。 2013年这篇《Adaptive Local Tone Mapping Based on Retinex for High Dynamic Range Images》发表在了IEEE上,如题目所说,文章提到将高动态图像在低动态范围显示设备上进行显式时,会面临信息丢失的问题。因此结合传统的CENTER/SURROUND RETINEX 技术提出了全局自适应和局部自适应的HDR实现过程,对HDR image 进行色调映射。而文中的全局自适应方法对于低照度图像具有很好的照度提升效果。作者将他的Matlab脚本上传到了Github,有兴趣的可以点击这里去查看。 全局自适应原理 全局自适应方法的原理很简单,就是两个公式; L g ( x , y ) = l o g ( L w ( x , y ) / L w ˉ + 1 ) l o g ( L w m a x / L w ˉ + 1 ) L_{g}(x,y)=\frac{log(L_{w}(x,y)/\bar{L_{w}}+1)}{log(L_{wmax}/\bar{L_{w}}+1)} Lg​(x,y)=log(Lwmax​/Lw​ˉ​+1)log(Lw​(x,y)/Lw​ˉ​+1)​ 上述式子中, L g

关于opencv更改摄像头参数(帧率,分辨率,曝光度……)的几个问题

1,适用于VideoCapture打开的摄像头 VideoCapture capture(0); 设置摄像头参数 不要随意修改 capture.set(CV_CAP_PROP_FRAME_WIDTH, 1080);//宽度 capture.set(CV_CAP_PROP_FRAME_HEIGHT, 960);//高度 capture.set(CV_CAP_PROP_FPS, 30);//帧率 帧/秒 capture.set(CV_CAP_PROP_BRIGHTNESS, 1);//亮度 capture.set(CV_CAP_PROP_CONTRAST,40);//对比度 40 capture.set(CV_CAP_PROP_SATURATION, 50);//饱和度 50 capture.set(CV_CAP_PROP_HUE, 50);//色调 50 capture.set(CV_CAP_PROP_EXPOSURE, 50);//曝光 50 获取摄像头参数 得到摄像头的参数 capture.get(CV_CAP_PROP_FRAME_WIDTH); capture.get(CV_CAP_PROP_FRAME_HEIGHT); capture.get(CV_CAP_PROP_FPS); capture.get(CV_CAP_PROP_BRIGHTNESS); capture.get(CV_CAP_PROP_CONTRAST); capture.get(CV_CAP_PROP_SATURATION); capture.get(CV_CAP_PROP_HUE); capture.get(CV_CAP_PROP_EXPOSURE); 获取视频参数: capture.get(CV_CAP_PROP_FRAME_COUNT);//视频帧数 然后你会发现除了个别参数你能更改之外(如曝光度),大分布你是不能更改的,甚至都没办法得到,这种并不适用 2,不做开发,只是单纯的更改 那么推荐一个软件,amcap,百度网盘链接,https://pan.baidu.com/s/1pL8nq0V#list/path=%2F,很简单很容易上手。 补,现在突然想起来我的一个学长告诉我的,利用这个软件调节摄像头的曝光度,可以改变帧率,且摄像头会记住曝光度的设置(其他特性就没有这个特点)。-2019.3.12 3,修改opencv的文件,不过效果可能和第一个差不多 大概是在opencv的这个位置,找一下,modules/highgui/src/cap_v4l.cpp,里面有关于参数的设置,位置比较靠前,可以搜索,也可以直接找到 大致在200多行 4,v4l2 下面是我找到的一篇参考,可以突破帧率的限制,当然前提是摄像头支持 https://blog.csdn.net/c406495762/article/details/72732135 目前只适用于Linux系统,本人试验过,120帧的摄像头在只打开摄像头时可以达到100帧左右,设置的图片分辨率越小,能达到的帧率越高 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include #include #include #include using namespace std; using namespace cv; #define CLEAR(x) memset(&(x), 0, sizeof(x)) #define IMAGEWIDTH 3264 #define IMAGEHEIGHT 2448 #define WINDOW_NAME1 "

opencv图像处理初步(二):实现色彩还原—(白平衡)

0、说明 目前很多摄像头特别是网络摄像头对色彩的处理情况存在色差,比如一个橙子(是黄色的),但是拍出来的效果会泛白,有点像梨子的颜色,因此要用到色彩校正。 一般色彩校正使用白平衡,白平衡一般又分为:灰世界、完美反射、等,这里不做具体陈述。 此处提供了一种方法,总体原理为(对每个通道而言): 1)对偏暗和偏亮的颜色进行特定的处理:指定一个特定的像素值; 2)对其他像素值进行小幅度拉伸; 3)最后三个通道合并即为最终结果。 注意:偏暗和偏亮得界限是不对称的,可以同通过改变代码中的s实现。 具体计算方式可以看源码(c语言实现,非c++)。 1、效果 2、代码实现 2.1我的实现(调整参数s以符合自己效果) /* 对偏暗和偏亮的的像素进行处理,对其他像素进行拉伸 偏暗和偏亮的判定可以通过调整下面的s进行调整,注意偏暗和偏亮是不对称的 */ #include #include using namespace cv; using namespace std; void color_balance(IplImage *img) { int histo[256] = { 0 };//直方图统计每个像素值的数目 int num_of_pixels = img->width*img->height; //统计每个像素值的数目 for (int y = 0; y < img->height; ++y) { uchar *data = (uchar*)(img->imageData + y*img->widthStep);//定义的大小和图像尺寸一致 for (int x = 0; x < img->width; ++x) { histo[data[x]] += 1; } } //统计当前像素值和之前像素值的总数 for (int i = 1; i < 256; ++i) histo[i] = histo[i] + histo[i - 1]; double s = 0.