- 博客(15)
- 资源 (45)
- 收藏
- 关注
原创 opengl中使用多重纹理
两个原始纹理混合后的效果图顶点shaderattribute vec3 pos;attribute vec2 texcoord;attribute vec3 normal;uniform mat4 M;uniform mat4 P;uniform mat4 V;varying vec2 V_Texcoord;void main(){ V_T
2017-07-27 12:11:45 3597
原创 opengl解析obj模型文件
obj模型文件格式# This file uses centimeters as units for non-parametric coordinates.mtllib Cube.mtlg defaultv -0.500000 -0.500000 0.500000 #顶点坐标v 0.500000 -0.500000 0.500000v -0.500000 0.500000 0.5
2017-07-26 15:34:37 4024 8
原创 大规模模型绘制的优化思路
思路:1,使用VBO和IBO减少主机内存和显存之间的数据传递2,只绘制摄像机可视范围内的模型具体实现:1,加载模型时创建每个模型的VBO和IBO,初始化每个模型的AABB包围盒 /** * 加载模型数据 */ bool load(const char* fileName) {
2017-07-19 18:41:16 660
转载 图像处理算法——卷积
转自:http://blog.csdn.net/xueyedie1234/article/details/51577495本文索引:一 什么是卷积二 相关算子三 卷积算子四 边缘效应五 常用的卷积核及其用途六 一个例子使用卷积实现模糊效果一、 什么是卷积? 在图像处理中,卷积操
2017-07-12 19:09:46 960
原创 opencv之图像模糊
图像的模糊处理也称平滑处理,模糊处理的用途是为了减少图像上的噪点或者失真。背后的数学原理是图像的卷积运算:具体原理描述:上面有一副6x6像素图像和3x3卷积核,卷积过程:1,滑动卷积核,使核的中心位于输入图像g(i,j)像素上2,卷积核的每个元素和覆盖图像的像素点值相乘,然后相加3,卷积计算的结果作为中心像素点也就是红色部分像素点的结果4,重复上述滑动过
2017-07-12 19:07:06 787
原创 图像的数学表示
1,什么是图像a,可见图像:自然界中的每一个可见自然景象都是一幅幅立体图像这些图像由可见光形成,能被人的视觉系统所感受。b,不可见图像:X射线,红外线,微波,超声形成的图像实质上是某种物理量的平面或空间分布图不能为人眼直接感受。综上所述:一幅可见图像是一个平面能量分布图,其本身可以是一个发光物体辐射源,也可以是物体受光辐射源照射后反射或透射的能量。2,图像的数学表示:
2017-07-12 13:27:28 5540
原创 opencv调整图像亮度与对比度
理论基础图像变换中一般有如下两种操作1,像素变换 对应 点操作2,,邻域操作 对应 区域 图像亮度与对比度的调整操作属于点操作,点操作的特点:1,根据输入像素值来计算相应的输出像素值亮度与对比度调整的数学模型g(i,j)=a*f(i,j)+bf(i,j)表示源图像,g(i,j)表示输出图像像素参数 a (a >0) 被称为增益,用来控制图像的对比度参数b 被
2017-07-10 14:01:33 3980
原创 vbo和fbo的结合使用
效果图上图实现了这样一个效果:大的正方体每个面,都有一个旋转的小正方体实现原理:1,创建FBO2,绘制一个场景,但这个场景并不显示到窗口3,将这个场景渲染到一个创建的动态纹理上面4,再次绘制其他场景5,将FBO里面的动态纹理贴到绘制的其他模型上代码实现 virtual void render() { //第一次绘制的立方体 渲染到
2017-07-07 17:32:58 777
原创 opencv图像线性混合操作
图像线性混合的数学原理G(x)=(1-a)F(x)+aQ(x)注意事项:1,a的取值范围为0到1之间2,F(x)和Q(x)为参与混合的两幅图像,G(x)表示输出图像3,通过对两幅图像的每个像素值做线性加权得到最终的输出图像4,两幅图像的大小和类型必须完全一致,如果把图像当成一个矩阵则两个矩阵相加的前提是维度必须一致,否则没有相加的意义。示例第一幅参与混合
2017-07-07 14:23:53 1243
原创 opencv修改图像的像素值
本节知识点1,读写图像a,imread可以加载灰度图或者RGB图像b,imwrite保存图像,类型由扩展名决定2,读写图像的像素a,读取灰度图像像素点的值(CV_8UC1)Scalar intensity=img.at(y,x);或者Scalar intensity=img.at(Point(x,y))3,读一个RGB像素点的像素值Vec3f int
2017-07-06 16:08:40 19442
原创 顶点缓冲区VBO和索引缓冲区IBO的结合使用
virtual void onInit() { //清空窗口为黑色 glClearColor(0,0,0,1); //设置视口的位置和大小--尝试改变视口的位置和大小 glViewport(0,0,(GLint)_winWidth,(GLint)_winHeight); //创建VBO-顶点缓冲区 glGenBuffers(1, &_vertexId);//若创建多个,
2017-07-06 14:12:33 542
原创 Mat对象的使用及注意事项
1,什么是Mat对象 ,见下图Mat对象封装了图像在内存中的信息,用于表示一副加载到内存中的图像,是opencv2.0以后引入的相比之前的IpImage对象,具有自动分配内存,不存在内存泄漏的优点,Mat对象分为头部与数据部分。2,Mat对象的使用因为Mat对象分为头部和数据两部分,所以当复制mat对象时有两种情况1,完全复制:就是把Mat对象的头部和数据部分完全复制
2017-07-05 15:33:11 1707
原创 矩阵的掩膜操作实现图像对比度调整
opencv中,掩膜操作是定义一个矩阵,然后根据这个矩阵重新计算每个像素的值,掩膜有如下用途1,提取感兴趣区域2,屏蔽作用3,结构特征提取4,特殊形状图像的制作涉及到的知识点1,获取图像像素指针Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数,也就是返回对应像素行的行指针const uchar* current
2017-07-04 13:54:17 1454
原创 opencv常用函数解析
CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );功能:加载一个指定的图像文件,并返回此图像文件的mat对象第一个参数:文件名第二个参数:加载的图像类型,常用三种取值。IMREAD_UNCHANGED (IMREAD_GRAYSCALE (0):将原图作为灰度图加载
2017-07-03 15:02:38 409
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人