Skip to content

Commit

Permalink
1. 修改对于编码问题的描述
Browse files Browse the repository at this point in the history
2. 增加一节优化
  • Loading branch information
Mq-b committed Jul 2, 2024
1 parent d21aca9 commit def0951
Showing 1 changed file with 34 additions and 2 deletions.
36 changes: 34 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ int main() {

![1](image/运行示例.png)

实测扫码枪可以识别。如果当前环境编码存在问题,可以考虑进行编码转换,转换到 UTF-8。
实测扫码枪可以识别。实测不管 windows 是否开启全局 utf8,都可正常识别数据。(未测试中文)

我们稍微详细的来解释一下上面的代码。

Expand Down Expand Up @@ -140,8 +140,40 @@ using namespace ZXing;
imwrite("pdf417_barcode.png", barcodeImage);
```
## 优化
在将条形码数据转换为 OpenCV 的 Mat 对象时,原始代码使用了一个双重循环进行逐个像素的遍历。虽然对于小数据集来说这没什么问题,但在面对庞大的数据时,这种方法的效率可能会受到影响。因此,我们可以通过以下方式进行优化,减少不必要的遍历。
首先,初始化一个白色背景的Mat对象:
```cpp
Mat barcodeImage(height, width, CV_8UC1, Scalar(255)); // 初始化为白色
```

然后,创建一个**指向 Mat 对象数据的指针**,以便直接访问和修改像素值:

```cpp
uint8_t* ptr = barcodeImage.ptr<uint8_t>(0);
```

接下来,使用双重循环遍历位矩阵。在每次迭代中,检查当前位是否设置为真(即需要绘制为黑色)。如果是,则直接通过指针修改相应位置的像素值为 0(黑色)。这种方法减少了逐个像素访问的开销,提高了效率:

```cpp
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
if (bitMatrix.get(x, y)) {
ptr[y * width + x] = 0; // 设置为黑色
}
}
}
```

---

当然了,最直观有效的方式应该是利用硬件性能,也就是:创建线程......

## 总结

最大的问题不在于代码的理解,而是在于环境的构建。

代码本身是简单的,根据这个小例子足以修改、增加,完成许多的需求。
代码本身是简单的,根据这个小例子足以修改、增加,完成许多的需求。

0 comments on commit def0951

Please sign in to comment.