• 半色调 二值化 条码打印 针式打印


    • 利用c++的CImg库和用于矩阵处理的Eigen库来实现
    • 编译工具:visual stdio(建议使用,之前我也使用sublime来配置c++的各种库,总是各种bug)

    // image2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
    //
    #include <algorithm>
    #include "pch.h"
    #include <iostream>
    #include "CImg.h"
    #include <Eigen3/Eigen/Dense>
    
    using namespace cimg_library;
    using namespace std;
    using namespace Eigen;
    int main()
    {
        CImg<int> SrcImg;
        SrcImg.load_bmp("E:/Desktop/picture_process/Lenna/general_img.bmp");
        double r = (double)SrcImg.height() / 272;
        double c = (double)SrcImg.width() / 352;
        double scale = max(r, c);
        if (scale > 1) {
            double s = (double)1.0 / scale;
            SrcImg.resize(s*SrcImg.height(), s*SrcImg.width(),1,1,5);
        }
        MatrixXd m(3*SrcImg.height(), 3*SrcImg.width());
        MatrixXd dot_mat[10];
        for (int i = 0; i < 10; i++) {
            dot_mat[i] = MatrixXd::Zero(3, 3);
        }
        dot_mat[1] << 0, 255, 0,
            0, 0, 0,
            0, 0, 0;
        dot_mat[2] << 0, 255, 0,
            0, 0, 0,
            0, 0, 255;
        dot_mat[3] << 255, 255, 0,
            0, 0, 0,
            0, 0, 255;
        dot_mat[4] << 255, 255, 0,
            0, 0, 0,
            255, 0, 255;
        dot_mat[5] << 255, 255, 255,
            0, 0, 0,
            255, 0, 255;
        dot_mat[6] << 255, 255, 255,
            0, 0, 255,
            255, 0, 255;
        dot_mat[7] << 255, 255, 255,
            0, 0, 255,
            255, 255, 255;
        dot_mat[8] << 255, 255, 255,
            255, 0, 255,
            255, 255, 255;
        dot_mat[9] << 255, 255, 255,
            255, 255, 255,
            255, 255, 255;
    
        cimg_forXY(SrcImg, x, y) {
            SrcImg(x, y) = (int)(SrcImg(x, y) / 25.6);
        }
        //cout << SrcImg(0, 0, 0) << endl;
        for (int i = 0; i < SrcImg.height(); i++) {
            for (int j = 0; j < SrcImg.width(); j++) {
                int level = SrcImg(i, j, 0);
                m.block<3,3>(i*3,j*3) <<  dot_mat[level];
            }
        }
        CImg<int> tmp(m.rows(), m.cols(), 1, 1);
        cimg_forXY(tmp, x, y) {
            tmp(x, y) = m(x, y);
        }
        tmp.display();
        return 0;
    }
    
    --------------------- 
    作者:perry0528 
    来源:CSDN 
    原文:https://blog.csdn.net/perry0528/article/details/82854322 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    原图

    处理后的图片:

    ==============================================================================

    半色调打印技术实验报告

    https://wenku.baidu.com/view/9056aa45c4da50e2524de518964bcf84b9d52d0d.html

    ===========================================================================

    图像处理

    https://www.codeproject.com/Articles/66341/A-Simple-Yet-Quite-Powerful-Palette-Quantizer-in-C

    基于误差扩散算法的半色调色彩抖动处理程序

    http://bbs.bccn.net/thread-480344-1-1.html

  • 相关阅读:
    Android OpenGL ES 2.0 (四) 灯光perfragment lighting
    Android OpenGL ES 2.0 (五) 添加材质
    冒泡排序函数
    javascript object 转换为 json格式 toJSONString
    Liunx CentOS 下载地址
    jquery 图片切换特效 鼠标点击左右按钮焦点图切换滚动
    javascript 解析csv 的function
    mysql Innodb Shutdown completed; log sequence number解决办法
    Centos 添加 yum
    javascript 键值转换
  • 原文地址:https://www.cnblogs.com/mingjing/p/10404895.html
Copyright © 2020-2023  润新知