基于Qt的OpenGL可编程管线学习(18)- 平滑锐化边缘检测
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于Qt的OpenGL可编程管线学习(18)- 平滑锐化边缘检测相关的知识,希望对你有一定的参考价值。
1、平滑
shader
// 平滑 uniform sampler2D U_MainTexture; uniform sampler2D U_SubTexture; varying vec2 M_coord; void main() { vec4 color = vec4(0.0); int coreSize = 3; float texelOffset = 1 / 300.0; float kernel[9]; kernel[6] = 1; kernel[7] = 1; kernel[8] = 1; kernel[3] = 1; kernel[4] = 1; kernel[5] = 1; kernel[0] = 1; kernel[1] = 1; kernel[2] = 1; int index = 0; for(int y = 0; y<coreSize; y++) { for(int x=0; x<coreSize; x++) { vec4 currentColor=texture2D(U_MainTexture, M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset)); color += currentColor * kernel[index++]; } } color /= 9.0; gl_FragColor = color; }
效果图
2、锐化
shader
// 锐化 uniform sampler2D U_MainTexture; uniform sampler2D U_SubTexture; varying vec2 M_coord; void main() { vec4 color = vec4(0.0); int coreSize = 3; float texelOffset = 1 / 300.0; float kernel[9]; kernel[6] = 0; kernel[7] = -1; kernel[8] = 0; kernel[3] = -1; kernel[4] = 4; kernel[5] = -1; kernel[0] = 0; kernel[1] = -1; kernel[2] = 0; int index = 0; for(int y = 0; y<coreSize; y++) { for(int x=0; x<coreSize; x++) { vec4 currentColor=texture2D(U_MainTexture, M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset)); color += currentColor * kernel[index++]; } } //color /= 9.0; gl_FragColor = 4.0 * color + texture2D(U_MainTexture, M_coord); }
效果图
3、边缘检测
shader
// 边缘检测 uniform sampler2D U_MainTexture; uniform sampler2D U_SubTexture; varying vec2 M_coord; void main() { vec4 color = vec4(0.0); int coreSize = 3; float texelOffset = 1 / 300.0; float kernel[9]; kernel[6] = 0; kernel[7] = 1; kernel[8] = 0; kernel[3] = 1; kernel[4] = -4; kernel[5] = 1; kernel[0] = 0; kernel[1] = 1; kernel[2] = 0; int index = 0; for(int y = 0; y<coreSize; y++) { for(int x=0; x<coreSize; x++) { vec4 currentColor=texture2D(U_MainTexture, M_coord+vec2((-1+x)*texelOffset,(-1+y)*texelOffset)); color += currentColor * kernel[index++]; } } //color /= 9.0; gl_FragColor = 4.0 * color + texture2D(U_MainTexture, M_coord); }
效果图
本文出自 “不会飞的纸飞机” 博客,请务必保留此出处http://douzhq.blog.51cto.com/12552184/1931094
以上是关于基于Qt的OpenGL可编程管线学习(18)- 平滑锐化边缘检测的主要内容,如果未能解决你的问题,请参考以下文章