首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用单色QImage

使用单色QImage
EN

Stack Overflow用户
提问于 2012-12-06 22:53:08
回答 1查看 2.6K关注 0票数 1

我正在尝试从QPixmap中提取位掩码并将其传递给OpenCV。我的位掩码是通过“绘画”操作创建的。

到目前为止,我的过程是:

  1. 创建一个QPixmap, QPixmap::fill(QColor(0,0,0,0))并使用QPainterQPainter::setPen(QColor(255,0,0,255))QPainter::drawPoint(mouse_event->pos()
  2. 准备好提取位掩码QPixmap::toImage(),然后是QImage::createAlphaMask(),这是为返回QImage::Format_MonoLSB而记录的。

不过,我现在被正式卡住了。我在破解文件时遇到了困难:

存储在QImage中的每个像素都由一个整数表示。整数的大小取决于格式。QImage支持由格式枚举描述的几种图像格式。 单色图像使用1位索引存储到一个最多有两种颜色的颜色表中。单色图像有两种不同的类型:大端(MSB第一)或小端点(LSB第一)位顺序。 ..。 createAlphaMask()函数从该映像中的alpha缓冲区构建并返回一个1-bpp掩码.

另外:

QImage::Format_MonoLSB --2--图像以每像素1位的方式存储。字节首先用不太重要的位(LSB)填充。

有人能帮我澄清一下如何把它转换成cv::Mat吗?

另外,我是否应该读到每一个像素都是一个unsigned char,或者我们将存储8个像素。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-07 18:26:33

我成功地将单色QImage传输到cv::Mat。我希望以下代码对其他人有所帮助:

重要编辑:这段代码有一个主要错误。bytesPerLine 是字节对齐的,在某些机器上也是对字对齐的。因此宽度()应该与cur_byte一起使用

代码语言:javascript
复制
QImage mask; //Input from wherever
cv::Mat workspace;
if(!mask.isNull() && mask.depth() == 1)
{
    if(mask.width() != workspace.cols || mask.height() != workspace.rows)
        workspace.create(mask.height(), mask.width(), CV_8UC1);

    for(int i = 0; i < mask.height(); ++i)
    {
        unsigned char * cur_row = mask.scanLine(i);
        //for(int cur_byte = 0, j = 0; cur_byte < mask.bytesPerLine(); ++cur_byte) wrong
        for(int cur_byte = 0, j = 0; j < mask.width(); ++cur_byte)
        {
            unsigned char pixels = cur_row[cur_byte];
            for(int cur_bit = 0; cur_bit < 8; ++cur_bit, ++j)
            {
                if(pixels & 0x01) //Least Significant Bit
                    workspace.at<unsigned char>(i, j) = 0xff;
                else
                    workspace.at<unsigned char>(i, j) = 0x00;
                 pixels = pixels >> 1; //Least Significant Bit
            }
        }
     }
 }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13754099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档