我有图片:
我有以下功能:
void DrawPixel(int x, int y, unsigned char r, unsigned char g, unsigned char b);
void ReadPixel(GLint x, GLint y, unsigned char &r, unsigned char &g, unsigned char &b);
删除图像的小形状,图像中有4个小形状,我想删除它们。一种方法是通过每个形状有多少红色像素,如果一个形状具有少于200个红色像素,例如,我将通过用黑色绘制将其从图像中移除。这只是我想象的一种解决方案,如果有人有任何其他选择,那将是受欢迎的。
void RemoveLastNoises(){
int x,y;
int cont = 0;
unsigned char r,g,b;
int xAux;
for(y=0;y<NewImage.SizeY()-0;y++){
for(x=0;x<NewImage.SizeX()-0;x++){
NewImage.ReadPixel(x,y,r,g,b);
if(r == 255){
cont = 0;
while(r == 255){
NewImage.ReadPixel(x+cont,y,r,g,b);
cont = cont + 1;
}
if(cont < 300){
NewImage.DrawPixel(x,y,255,255,255);
}
}
xAux = x;
x = x+cont;
}
x = xAux;
}
}
这是有效的,但只计算它在一行(x)中有多少红色像素,我觉得把它作为参考放在这里很有意思。无论如何,任何想要删除小形状的想法都会受到欢迎。
注意:不修改较大的形状,图像的高度和宽度较大,我将问题的尺寸减小为可读。
答案 0 :(得分:0)
有一组称为morophological过滤器的非线性过滤器。 他们使用&#34;和&#34;和&#34;或&#34;组合以创建过滤器蒙版。 你需要做的是实现结束。因此,OpenGL不会对这些函数进行权限处理,您必须自己编写代码。为此你
5和6描述了一个&#34; Closing&#34; https://en.wikipedia.org/wiki/Closing_(morphology)