最初的问题是,我希望将graphicsView中的唯一item读取出来作为QImge传入到opencv下的cvtColor(cvImage,grayImage, cv::COLOR_BGRA2GRAY);函数去使用。
但是发现通过
QGraphicsPixmapItem* pixmapItem = qgraphicsitem_cast<QGraphicsPixmapItem*>(item);
QPixmap oriPixmap = pixmapItem->pixmap();
QImage deelImage = oriPixmap.toImage().convertToFormat(QImage::Format_RGB32);;这样的方式得到cvtColor()函数的cvImage是有问题的,一直报错:
OpenCV(3.4.1) Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file D:\opencv\sources\modules\imgproc\src\color.cpp, line 11115
terminate called after throwing an instance of 'cv::Exception'
what(): OpenCV(3.4.1) D:\opencv\sources\modules\imgproc\src\color.cpp:11115: error: (-215) scn == 3 || scn == 4 in function cvtColor
QImage的通道、格式、编码:
-
通道(Channels):
QImage
可以包含不同数量的通道,包括:- 1通道(灰度图像):每个像素一个通道,用于表示灰度级别。
- 3 通道(RGB):每个像素包含红色、绿色和蓝色通道。
- 4通道(RGBA):每个像素包含红色、绿色、蓝色和alpha(透明度)通道。
-
格式(Format):
QImage
可以采用不同的格式存储图像数据,如:- Format_Indexed8:单通道图像,每像素8位。
- Format_RGB888:三通道RGB图像,每像素8位。
- Format_ARGB32:四通道RGBA图像,每个像素8位。
- ,等等其他格式可以存储不同通道数据的图像数据。
-
编码(Encoding):
QImage
可以保存不同编码的图像数据,但它通常用于表示图像的内部存储格式,而不是外部文件格式。编码指的是图像数据的存储方式,例如像素的排列和颜色的表示方法。不同的格式对应不同的编码方式。