反转像素-zxing
Invert pixels - zxing
我在iOS项目中使用zxing库。这是一个用于阅读和创建二维码的图书馆。
根据我在网上的研究和浏览,解码图像的过程由以下步骤组成:
- 从源获取图像
- 将所有像素转换为255灰度
- 解码数据
这个特定库不支持的一件事是读取/解码反向QRCodes(我很确定在创建时也缺少这一点)。
倒置二维码基本上与普通码相同->但有倒置的颜色(白色为黑色,黑色为白色)。但由于QRCodes标准没有描述反向QRCodes的实现,并且在zxing项目网站上有一些请求和问题,我必须自己实现。
下面的方法是插入一些逻辑来反转像素(unsigned char*
)的好地方,但由于我没有使用C++的经验,结果是这样写的。
grayData_
是unsigned char*
数据类型。在这个变量里面有来自源的灰度像素。
我想做的是反转这些像素。
如果我是正确的,这是由unsigned char cz = (255 - val);
完成的?
unsigned char* GreyscaleLuminanceSource::getMatrix() {
int size = width_ * height_;
unsigned char* result = new unsigned char[size];
if (left_ == 0 && top_ == 0 && dataWidth_ == width_ && dataHeight_ == height_) {
memcpy(result, greyData_, size);
} else {
for (int row = 0; row < height_; row++) {
memcpy(result + row * width_, greyData_ + (top_ + row) * dataWidth_ + left_, width_);
}
}
//return result;
//from this point down is my implementation
printf(" %c", result[200]);
printf(" %c", result[600]);
printf(" %c", result[6000]);
printf(" %c", result[7000]);
for (int i = 0; i < size; i++)
{
int val = static_cast<int>(result[i]);
unsigned char cz = (255 - val);
result[i] = cz;
}
printf("******n");
printf(" %c", result[200]); //prints a " " char to console/terminal
printf(" %c", result[600]); //prints a " " char to console/terminal
printf(" %c", result[6000]); //prints a " " char to console/terminal
printf(" %c", result[7000]); //prints a " " char to console/terminal
return result;
}
这是反转像素的正确方法吗?我对更改result
变量中的数据不太满意。
您不希望将值打印为字符,因为它们不是ASCII。将它们打印为无签名:
printf(" %u", ...);
您可以将循环简化为简单的
result[i] = static_cast<unsigned char>(255 - result[i]);
其他转换是正常的整体提升。
您应该注意,ZXing在识别代码时使用了一些非对称启发法。如果代码周围没有一个保护区域,在这种情况下是黑色的(因为保护区域应该是白色的),它可能无法识别代码。
相关文章:
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 他们如何将红外锁定像素转换为镜头前方 1m 的正常平面上的位置
- 访问随机图像像素的快速方法,最多一次
- OpenCV 像素访问点与 at() - 不同的值
- 如何使用 freetype2 访问单色位图中的像素状态
- 尝试渲染像素坐标时,简单线条渲染失败
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 在Qt-cpp中通过像素获取QString的子字符串
- 有效地计算像素到其对应核线的距离
- 反转像素-zxing