74PIX *pixr, *pixg, *pixb, *pixrm, *pixgm, *pixbm, *pixd;
77 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
78 if (pixGetDepth(pixs) != 32)
79 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", __func__, NULL);
80 if (type != L_MORPH_DILATE && type != L_MORPH_ERODE &&
81 type != L_MORPH_OPEN && type != L_MORPH_CLOSE)
82 return (
PIX *)ERROR_PTR(
"invalid morph type", __func__, NULL);
83 if (hsize < 1 || vsize < 1)
84 return (
PIX *)ERROR_PTR(
"hsize or vsize < 1", __func__, NULL);
85 if ((hsize & 1) == 0 ) {
86 L_WARNING(
"horiz sel size must be odd; increasing by 1\n", __func__);
89 if ((vsize & 1) == 0 ) {
90 L_WARNING(
"vert sel size must be odd; increasing by 1\n", __func__);
94 if (hsize == 1 && vsize == 1)
95 return pixCopy(NULL, pixs);
97 pixr = pixGetRGBComponent(pixs,
COLOR_RED);
100 if (type == L_MORPH_DILATE) {
101 pixrm = pixDilateGray(pixr, hsize, vsize);
102 pixgm = pixDilateGray(pixg, hsize, vsize);
103 pixbm = pixDilateGray(pixb, hsize, vsize);
104 }
else if (type == L_MORPH_ERODE) {
105 pixrm = pixErodeGray(pixr, hsize, vsize);
106 pixgm = pixErodeGray(pixg, hsize, vsize);
107 pixbm = pixErodeGray(pixb, hsize, vsize);
108 }
else if (type == L_MORPH_OPEN) {
109 pixrm = pixOpenGray(pixr, hsize, vsize);
110 pixgm = pixOpenGray(pixg, hsize, vsize);
111 pixbm = pixOpenGray(pixb, hsize, vsize);
113 pixrm = pixCloseGray(pixr, hsize, vsize);
114 pixgm = pixCloseGray(pixg, hsize, vsize);
115 pixbm = pixCloseGray(pixb, hsize, vsize);
117 pixd = pixCreateRGBImage(pixrm, pixgm, pixbm);