diff --git a/modules/highgui/src/grfmt_png.cpp b/modules/highgui/src/grfmt_png.cpp
index 79fa89ec59676d7055bfb65fc9f0ab1ccb92bbd7..c9b4b54e9e5b82815fe7e47edbb0840953f37fda 100644
--- a/modules/highgui/src/grfmt_png.cpp
+++ b/modules/highgui/src/grfmt_png.cpp
@@ -230,7 +230,7 @@ bool  PngDecoder::readData( Mat& img )
             else if( color )
                 png_set_gray_to_rgb( png_ptr ); // Gray->RGB
             else
-                png_set_rgb_to_gray( png_ptr, 1, -1, -1 ); // RGB->Gray
+                png_set_rgb_to_gray( png_ptr, 1, 0.299, 0.587 ); // RGB->Gray
 
             png_read_update_info( png_ptr, info_ptr );