图像取反 数字图像处理_数字图像处理的数字图像处理的matlab实现 - CSDN
  • 图像取反相当于取底片,对于每个像素点的RGB来讲,就是: R′=255−RR'=255-RG′=255−GG'=255-GB′=255−BB'=255-B用R’,G’,B’来替换R,G,B。直接上图吧,假如原图像是这样的: 那么处理后的图像就是这样的...

    图像取反相当于取底片,对于每个像素点的RGB来讲,就是:

    R=255R
    G=255G
    B=255B

    用R’,G’,B’来替换R,G,B。

    直接上图吧,假如原图像是这样的:


    这里写图片描述

    那么处理后的图像就是这样的:


    这里写图片描述

    代码实现如下:

    import java.io.File;
    import java.io.IOException;
    import java.awt.image.BufferedImage;
    import javax.imageio.ImageIO;
    
    public class ImageNegative {
        public static void main(String args[]) throws IOException {
            BufferedImage image = null;
            File f = null;
    
            try {
                f = new File("E:\\In.jpg");
                image = ImageIO.read(f);
    
                int width = image.getWidth();
                int height = image.getHeight();
    
                for (int j = 0; j < height; j++) {
                    for (int i = 0; i < width; i++) {
                        int p = image.getRGB(i, j);
                        int a = (p >> 24) & 0xff;
                        int r = (p >> 16) & 0xff;
                        int g = (p >> 8) & 0xff;
                        int b = p & 0xff;
    
                        r = 255 - r;
                        g = 255 - g;
                        b = 255 - b;
    
                        p = (a << 24) | (r << 16) | (g << 8) | b;
                        image.setRGB(i, j, p);
                    }
                }
    
                f = new File("E:\\Out.jpg");
                ImageIO.write(image, "jpg", f);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    展开全文
  • 图像取反

    2018-11-04 19:54:49
    图像取反:反转图像的像素强度,使图像中的前景变为背景,背景变为前景。 显然这是一个一对一的映射,即像素值0变为255,1变为254…254变为1,255变为0。对应的查找表为lookup[256]={255,254,…,1,0}。 代码如下: #...

    图像取反:反转图像的像素强度,使图像中的前景变为背景,背景变为前景。
    显然这是一个一对一的映射,即像素值0变为255,1变为254…254变为1,255变为0。对应的查找表为lookup[256]={255,254,…,1,0}。

    代码如下:

    #include <iostream>
    #include "opencv2/core/core.hpp"
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/highgui/highgui.hpp"
    
    using namespace std;
    using namespace cv;
    
    void Invert(Mat &img, const uchar* const lookup)
    {
        int rows=img.rows;
        int cols=img.cols*img.channels();
        for(int i=0; i<rows; i++)
        {
            uchar *p=img.ptr<uchar>(i);    //定义指针p  指向第i行的头
            for(int j=0; j<cols;j++)  
                p[j]=lookup[p[j]];         //j在移动  把p【j】赋值 
        }
    }
    
    int main()
    {
        Mat src=imread("C://1.bmp");  
        if(!src.data)
        {
            cout<<"error! The image is not built!"<<endl;
            return -1;
        }
        // 为了演示效果,将图片转换成灰度图片
        Mat img1=src;
        //cvtColor( src, img1, CV_RGB2GRAY );
        imshow("First",img1);
        //建立查找表
        uchar lookup[256];
        for(int i=0; i<256; i++)
            lookup[i]=255-i; //定义映射表中的值   反转图像
        //调用自定义图像取反函数
        Invert(img1, lookup);
        imshow("Second",img1);
        waitKey();
        return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 随着计算机技术、电子技术、和通信技术的发展,数字图像压缩在计算机和便携式系统中的应用越来越广泛。数字化图像使得图像信号可以高质量地传输,并便于图像的检索、分析、处理和存储。但是数字图像的表示需要大量的...
  • 包括图像的读入、显示、保存,获取图片大小、通道数等属性,求取图像均值、标准差,遍历图像各个像素,图像取反,图像色彩空间转换,通道分离与合并等 1.基本操作 (1)读入图像 # 默认的读入格式是BGR ...

    包括图像的读入、显示、保存,获取图片大小、通道数等属性,求取图像均值、标准差,遍历图像各个像素,图像取反,图像色彩空间转换,提取某种颜色,通道分离与合并等

    1.基本操作

    • (1)读入图像
    # 默认的读入格式是BGR
    img1 = cv2.imread('E:/PycharmProjects/one.jpg')
    • (2)显示图像
    cv2.imshow(‘winname’, img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    cv2.imshow(winname, mat) 有窗口名和图片两个参数,不要忘记第一个参数
    cv2.waitKey(delay: Any = None) 等待键盘输入。参数为延迟时间,单位为ms。参数为0时表示一直等到有键盘任意输入再进行下一操作。

    • (3)保存图像
    cv2.imwrite('E:/PycharmProjects/one.png', img1)

    cv2.imwrite(filename, img) 有文件名和图片两个参数,通过设定文件名的后缀可以转换图片格式

    • (4)获取图片属性
    def img_info(img):
        print('type:', type(img))
        print('img.size:', img.size)
        print('img.dtype:', img.dtype)
        print('img.shape', img.shape)
    img_info(img1)

    type( ): 获取对象类型,图像类型为numpy.ndarray
    .shape: h, w, c 高度、宽度、通道数,最常用
    .size: 图像像素总数
    .dtype: 数据类型,默认为uint8

    • (5)图像求均值、标准差
    mean_img = cv2.mean(img)
    m, stddev = cv2.meanStdDev(img)

    图像有三个通道时,结果为三个通道分别求均值和标准差

    • (6)遍历图像各个像素且取反
    import cv2
    import numpy as np
    img1 = cv2.imread('E:/PycharmProjects/one.jpg')
    def reverse_img(img):
        h, w, c = img.shape
        r_img = np.ones([h, w, c], dtype=np.uint8)#要注意dtype为np.uint8,否则图像无法正常显示
        print(r_img.dtype)
        print(r_img)
        print(r_img.shape)
        for row in range(h):
            for col in range(w):
                for ch in range(c):
                    r_img[row, col, ch] = 255-img[row, col, ch]
        print(r_img.dtype)
        show('reverse_img', r_img)
    
    reverse_img(img1)
    • (7)图像取反
    ot_img1 = cv2.bitwise_not(img1)
    • (8)图像色彩空间转换
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    HSV(Hue, Saturation, Value)色彩空间,H(色调),S(饱和度),V(明度)

    • (9)提取图像中某种颜色
    low = np.array([0, 0, 0])
    up = np.array([255, 100, 100])
    blue_img1 = cv2.inRange(img1, low, up)
    cv2.inRange(src: Any, lowerb: Any, upperb: Any, dst: Any = None)

    lowerb, upperb: numpy.ndarray类型

    HSV基本颜色分量范围:HSV基本颜色分量范围

    • (10)通道分离与合并
    b, g, r = cv2.split(img)
    merge_img = cv2.merge([b, g, r])

    2.代码示例

    import cv2
    import numpy as np
    
    # 1.读入图片和保存图片
    img1 = cv2.imread('E:/PycharmProjects/one.jpg')
    
    # 2.显示图片
    def show(name, img):
        cv2.imshow(name, img)
        cv2.waitKey(0)
    show('img1', img1)
    
    # 3.保存图像
    cv2.imwrite('E:/PycharmProjects/one.png', img1)
    
    # 4.获取图片属性
    def img_info(img):
        print('type:', type(img))
        print('img.size:', img.size)
        print('img.dtype:', img.dtype)
        print('img.shape', img.shape)
    img_info(img1)
    
    # 5.图像求均值、标准差
    def mean_dev(img):
        mean_img = cv2.mean(img)
        print('mean', mean_img)
        m, stddev = cv2.meanStdDev(img)
        print('m', m, '\n', 'StdDev', stddev)
    mean_dev(img1)
    
    # 6.遍历图像各个像素且取反(有问题)
    def reverse_img(img):
        h, w, c = img.shape
        r_img = np.zeros([h, w, c])
        for row in range(h):
            for col in range(w):
                for ch in range(c):
                    r_img[row, col, ch] = 255-img[row, col, ch]
        show('reverse_img', r_img)
    
    # reverse_img(img1)
    
    # 7.openCV取反函数
    def not_img(img):
        not_img = cv2.bitwise_not(img)
        show('not_img', not_img)
    not_img(img1)
    
    # 8.图像色彩空间转换
    def color_cvt_img(img):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
        show('gray', gray)
        show('hsv', hsv)
    color_cvt_img(img1)
    
    # 9.对图片的某种颜色进行提取
    def color_inrange(img):
        low = np.array([0, 0, 0])
        up = np.array([255, 100, 100])
        blue_img1 = cv2.inRange(img1, low, up)
        show('blue_img1', blue_img1)
    color_inrange(img1)
    
    
    # 10.通道分离、合并
    def img_channel(img):
        b, g, r = cv2.split(img)
        show('blue', b)
        print('blue.shape', b.shape)
        merge_img = cv2.merge([b, g, r])
        show('merge_img', merge_img)
    img_channel(img1)

    3.结果展示

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 文章目录一、平台二、实现功能1、打开图片文件2、图像取反3、直方图均衡化4、幂次变换三、遇到问题反思:附代码: 设计一个集成各种图像处理算法的软件(前几次作业已经实现的算法、功能) 一、平台 使用平台:VS...


    设计一个集成各种图像处理算法的软件(前几次作业已经实现的算法、功能)

    一、平台

    使用平台:VS2015+MFC
    语言:C语言

    VS: Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft
    Windows、Windows Mobile、Windows
    CE、.NET Framework、.NET Compact
    Framework和Microsoft Silverlight 及Windows Phone。

    MFC: 微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

    界面如下:
    在这里插入图片描述
    在这里插入图片描述

    二、实现功能

    1、打开图片文件

    在这里插入图片描述

    点击“打开”按钮,即可选择图片文件进行打开并在左侧窗口显示出来。

    目前只支持.bmp格式的图片。

    2、图像取反

    在这里插入图片描述

    点击“图像取反”按钮,可对原图进行取反操作。

    3、直方图均衡化

    在这里插入图片描述
    (注:这一步的操作是有问题的,彩色直方图均衡化不应该对RGB三通道分别操作,关于这一问题以后会说到,这里就不多说了)

    4、幂次变换

    在这里插入图片描述

    输入v*10的值,点击幂次变换按钮实现幂次变换。

    三、遇到问题

    在这里插入图片描述

    MFC读取的是bmp格式文件,最开始调试时想看一下读取的数据对不对,就把数据输出看了一下,结果如上,左是原图,右是输出的图。可以看到不仅左右上下翻转了,图像颜色也变了。

    关于翻转,是因为bmp格式读取图像顺序的原因,这个老师讲过。

    关于颜色也变化就于点好奇,,,上网查了一下,原来bmp格式不是RGB格式而是BGR这个顺序。

    不过还挺好看的:)

    反思:

    这周的作业,前段时间一直在纠结用MFC还是QT,最后先学会了MFC便用了MFC。写的代码架构不太好,有点乱。

    附代码:

    代码有点长,还是之后有时间上传到github吧,到时候会在这里更新地址

    展开全文
  • 内容有文件(打开、保存、退出)、点处理(彩色转灰阶、图像取反、图像旋转、图像镜像、均衡化、直方图、亮度变化、直方图扩展)、空频域变换(傅里叶变换、傅里叶反变换、离散余弦变换、离散余弦反变换、巴特沃斯低...
  • 数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结整理,欢迎大家一起学习交流...

    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。本专栏将以学习笔记形式对数字图像处理的重点基础知识进行总结整理,欢迎大家一起学习交流!
     专栏链接:数字图像处理学习笔记

    一、阵列和矩阵操作

    图像可以被等价的看作是矩阵

    事实上,在很多情况下,图像间的操作拭用矩阵理论执行的

    例如2×2的图像  \begin{bmatrix} a_{11} &a_{12} \\ a_{21}&a_{22} \end{bmatrix}\begin{bmatrix} b_{11} &b_{12} \\ b_{21}&b_{22} \end{bmatrix}

    阵列相乘是   \begin{bmatrix} a_{11} &a_{12} \\ a_{21}&a_{22} \end{bmatrix}\begin{bmatrix} b_{11} &b_{12} \\ b_{21}&b_{22} \end{bmatrix}=\begin{bmatrix} a_{11}b_{11} &a_{12}b_{12} \\ a_{21}b_{21}&a_{22}b_{22} \end{bmatrix}

    数字图像处理中的阵列相乘对应MATLAB中的点乘(.*)

    ☞当我们谈到一幅图像的求幂时,意味着每个像素均进行求幂操作;
    ☞当我们谈到一幅图像除以另一幅图像时,意味着在相应的像素之间进行相除。


    二、线性操作和非线性操作

    图像处理方法最重要的分类之一是它是线性的还是非线性的
    考虑一般的算子H,该算子对于给定输入图像f(x,y)产生一副输出图像g(x,y)
    H[f(x,y)]=g(x,y)

    如果,则称H是一个线性算子。

    现假设H是求和算子∑,该算子的功能是简单地求和

    \sum [a_{i}f_{i}(x,y)+a_{j}f_{j}(x,y)]=\sum a_{i}f_{i}(x,y)+\sum a_{j}f_{j}(x,y)=a_{i}\sum f_{i}(x,y)+ a_{j}\sum f_{j}(x,y)=a_{i}g_{i}(x,y)+a_{j}g_{j}(x,y)
    注:是阵列求和,不是图像所有元素求和,因此单幅图像的求和是该图像本身

    该方法用于证明对应的操作是线性操作还是非线性操作(左边=右边→线性;左边≠右边→非线性

    例:有两幅图像,进行最大值操作,现假设令a{_{1}}=1和a{_{2}}=-1,

           计算左侧

           计算右侧

           我们发现,左侧不等于右侧(-2≠-4),至此证明了求最大值的操作通常是非线性的。


    三、算数操作

    图像间的算术操作阵列操作(算数操作在相应的算数对之间进行)

    图像的算数操作涉及同样大小的图像

    图像相:s(x,y)=f(x,y)+f(x,y)
    图像相:g(x,y)=f(x,y)-f(x,y)
    图像相:d(x,y)=f(x,y)×f(x,y)
    图像相:v(x,y)=f(x,y)÷f(x,y)
    其中,x=1,2,3,...,M-1,y=1,2,3,...,N-1
    通常,M和N是图像的行和列,s,g,d和v是大小为M×N的图像

    图像相①去除叠加性噪声 
                      

                      ②生成图像叠加效果 
                     

    图像相①增强差别   
                     
          
                      ②去除不需要的叠加性图案
    (例:电视制作的蓝屏技术)
                      
                       ③图像分割(如:分割运动的车辆,减法去掉静止部分,剩余的是运动元素和噪声)
    图像相: ①校正/消除阴影
                                 

                       ②图像的局部显示(用二值蒙板图像与原图像做乘法)
                                
    图像相: 校正/消除阴影


    四、集合和逻辑操作

    代数运算——非:①获得一个阴图像(注:R,G,B三通道分别取反再合到一起还是彩色图像)
                                     
                                  ②获得一个子图像的补图像
                                      

    代数运算——与:①求两个子图像的相交子图
                                   

                                 ②提取感兴趣的子图像
                                    

    代数运算——或:①合并子图像
                                    

                                 ②提取感兴趣的子图像
                                     

    代数运算——异或:获得相交子图像
                                     

    综合图例:


    欢迎留言,一起学习交流~~~

    感谢阅读

    END

     

    展开全文
  • 一、课程背景数字图像处理技术的发展涉及信息科学、计算机科学、数学、物理学以及生物学等学科,因此数理及相关的边缘学科对图像处理科学的发展有越来越大的影响。近年来,数字图像处理技术日趋成熟,它广泛应用于...
  • 功能介绍2.1基本操作2.2图像类型变换2.3图形几何变换2.4图像变换2.5图像添加噪声2.6图像复原2.7图像增强2.8图像分割2.9图像编码2.10二值形态学处理2.11小波图像处理2.12数字图像处理应用3. 项目总结 1.总体功能概述 ...
  • 在过去的很长一段时间里,只有少数能够接触到昂贵设备的专业人员才有机会使用计算机操作数字图像(即数字图像处理)。这种专业人员与设备的组合通常只会出现在一些研究性实验室,因此数字图像处理技术起源于学术领域...
  • 数字图像处理

    2012-05-10 15:31:55
    数字图像处理 灰度处理 灰度化处理是把含有亮度和色彩的彩色图像变换成灰度图像的过程。 灰度图像是指只含有亮度信息,不含色彩信息的图像。这类图像通常显示为从最暗的黑色到最亮的白色之间不同深浅等级的灰度,...
  • 第 1 章 绪论 图像、数字图像、像素的概念和表示、取值范围。 图像 就是视觉景物的...3. 数字图像处理主要研究哪些内容? ❖办公室自动化图像应用:邮政编码图像识别、 OCR(字符识别系统)、 自动判卷系统、 各类
  • 在计算机图形学与图像处理中,数字图像的灰度是进行图像识别与处理的基础。我们往往需要先读取数字图像的灰度,然后对其进行分析与处理,如生成灰度直方图、灰度修正、提取图像特征、图像锐化等。本文介绍在Visual J...
  • 代码很简单,就四行,我想到可以用mathematica干点什么了。 有人通过mathematica编程研究过视频编解码算法么,挺有意思,可以尝试一下。 img=Import["f:/lena.jpg"] pix=ImageData[img];......
  • 数字图像处理第十章数字图像处理---图像分割(一)点、线和边缘检测1.1 点检测1.2 线检测1.3 使用函数edge的边缘检测(二)使用霍夫变换的线检测2.1 函数hough2.2 函数houghpeaks2.3 函数houghlines(三)阈值处理...
  • 数字图像处理概论

    2019-04-04 21:28:10
    数字图像处理(Digital Image Processing)是通过计算机对图像进行去除噪声、增强、复原、分割、提取特征等处理的方法和技术。数字图像处理的产生和迅速发展主要受三个因素的影响:一是计算机的发展;二是数学的发展...
  • 圣诞礼物大作战前奏:拼图 ps的话简单,所以才有人开发了ps。...彩色图像有RGB层,红,绿,蓝。所以到时嵌入需要两张图片的每一层对应后再叠加。 先裁剪麦兜图片。利用 a = imread('small.jpg'); g
1 2 3 4 5 ... 20
收藏数 2,509
精华内容 1,003
关键字:

图像取反 数字图像处理