我想使用Java和OpenCV将图片从RGB转换为GRAY
所有扩展图片都能正常工作,我拍摄灰色图片,
如果我制作.GIF图片(不移动)它会给我这个错误:
OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cv::cvtColor
java代码:
Mat scrImg = Highgui.imread(path);
Mat dstImg = new Mat(scrImg.rows(),scrImg.cols(),scrImg.type());
Imgproc.cvtColor(scrImg, dstImg, Imgproc.COLOR_RGB2GRAY);
private static BufferedImage Mat2BufferedImage(Mat matrix){
BufferedImage bimOut;
int type;
if(matrix.channels() == 1)
type = BufferedImage.TYPE_BYTE_GRAY;
else
type = BufferedImage.TYPE_3BYTE_BGR;
int dataLength = matrix.channels()*matrix.cols()*matrix.rows();
byte [] buffer = new byte[dataLength];
bimOut = new BufferedImage(matrix.cols(),matrix.rows(),type);
matrix.get(0,0,buffer);
final byte[] bimPixels = ((DataBufferByte) bimOut.getRaster().getDataBuffer()).getData();
System.arraycopy(buffer, 0, bimPixels, 0, buffer.length);
return bimOut;
}

答案 0 :(得分:2)
根据官方documentation
目前,支持以下文件格式:
- Windows位图 - * .bmp,*。.dib(始终支持)
- JPEG文件 - * .jpeg,* .jpg,*。jpe(请参阅“注释”部分)
- JPEG 2000文件 - * .jp2(参见“注释”部分)
- 便携式网络图形 - * .png(请参阅“注释”部分)
- WebP - * .webp(参见“备注”部分)
- 便携式图像格式 - * .pbm,* .pgm,*。ppm * .pxm,* .pnm(始终支持)
- Sun rasters - * .sr,* .ras(始终支持)
- TIFF文件 - * .tiff,* .tif(参见注释部分)
- OpenEXR图像文件 - * .exr(参见“注释”部分)
- Radiance HDR - * .hdr,* .pic(始终支持)
- Gdal支持的栅格和矢量地理空间数据(请参阅“注释”部分)
显然不包括支持因为gif是专有格式。 http://answers.opencv.org/question/72134/cv2imread-cannot-read-gifs/