美文网首页
007 图像像素的逻辑操作

007 图像像素的逻辑操作

作者: 几时见得清梦 | 来源:发表于2019-07-26 23:39 被阅读0次
  • 本节内容:每个像素点的位操作。常见的有与或非、异或、同或等。
图像位操作
  • 与、或、异或是针对两张图像的位操作;还可以针对一张图像进行位操作:bitwise_not。
  • 将每个通道、每个像素值变为8位的值,然后进行位操作。
两张原图(黄色矩形左上角(100,100),红色图像左上角(150,150))

图像有三个通道,对每个通道都需要进行位操作,得到下边结果:


位操作结果
  • 与操作:两个都为1结果才为1。产生一个红色矩形:黄色255=红色255+绿色255
  • 异或操作:相同为0,不同为1
  • 或操作:有1个为1则结果为1
对原图取反的结果

C++

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main(int argc, const char *argv[])
{
    // create image one
    Mat src1 = Mat::zeros(Size(400, 400), CV_8UC3); //创建图像,BGR
    Rect rect(100, 100, 100, 100); //构造一个矩形Rect,四个参数为(左上x,左上y,宽,高)
    src1(rect) = Scalar(0, 0, 255); //填充
    imshow("input1", src1);
    printf("create first image...\n");

    // create image two
    Mat src2 = Mat::zeros(Size(400, 400), CV_8UC3);
    rect.x = 150;
    rect.y = 150;
    src2(rect) = Scalar(0, 0, 255);
    imshow("input2", src2);
    printf("create second image...\n");

    // 逻辑操作
    Mat dst1, dst2, dst3;
    bitwise_and(src1, src2, dst1); //与,常用于mask,图像与mask图像做与操作,可取到mask指定的区域
    bitwise_xor(src1, src2, dst2); //异或
    bitwise_or(src1, src2, dst3); //或

    // show results
    imshow("dst1", dst1);
    imshow("dst2", dst2);
    imshow("dst3", dst3);

    Mat src = imread("D:/vcprojects/images/test.png");
    namedWindow("input", WINDOW_AUTOSIZE);
    imshow("input", src);
    // 取反操作
    Mat dst;
    bitwise_not(src, dst); //取反,常用于二值图像取反
    imshow("dst", dst);

    waitKey(0);
    return 0;
}

Python

import cv2 as cv
import numpy as np

# create image one
src1 = np.zeros(shape=[400, 400, 3], dtype=np.uint8) #创建图像
src1[100:200, 100:200, 1] = 255 #对高100:200、宽100:200的区域的第一个通道,赋值255(通道为BGR,从0索引)
src1[100:200, 100:200, 2] = 255
cv.imshow("input1", src1)
# create image two
src2 = np.zeros(shape=[400, 400, 3], dtype=np.uint8)
src2[150:250, 150:250, 2] = 255
cv.imshow("input2", src2)

dst1 = cv.bitwise_and(src1, src2)
dst2 = cv.bitwise_xor(src1, src2)
dst3 = cv.bitwise_or(src1, src2)


cv.imshow("dst1", dst1)
cv.imshow("dst2", dst2)
cv.imshow("dst3", dst3)

src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)
dst = cv.bitwise_not(src)
cv.imshow("dst", dst)

cv.waitKey(0)
cv.destroyAllWindows()

相关文章

  • 007 图像像素的逻辑操作

    本节内容:每个像素点的位操作。常见的有与或非、异或、同或等。 与、或、异或是针对两张图像的位操作;还可以针对一张图...

  • 图像处理基本知识点

    图像像素操作 集合运算,加减乘除 逻辑运算,与或非取反 像素读写 通道混合与调整 对比度与亮度调整 图像几何变换 ...

  • 图像处理

    第三章 图像处理 1.点操作 输出图像的像素值仅仅由输入图像的像素值决定。 1.1 像素变换 ...

  • 图像操作(像素)

    知识点 获取像素点:Mat.at(row,col) --三通道//获取像素点列表由bgr三个元素组成...

  • 小强学Python+OpenCV之-1.2图像基础

    目标 学完本节,我们将理解: 图像的基本元素是像素,什么是像素。 图像的坐标系统是怎样的。 操作像素的RGB值 通...

  • 1.6 openCV-python 图像的基础操作

    图像的基础操作 获取像素值并修改 获取图像的属性 图像的ROI() 图像通道的拆分与合并

  • 第二章 图像的点运算

    图像的点运算主要用于改变一副图像的灰度分布范围。操作对象是单个像素值,输出像素值只与输入像素值有关。 灰度直方图 ...

  • 着色器图像处理(亮度/对比度/反像)

    基于固定基图像的图像混合操作:针对图像各像素与常量值之间的混合操作 图像的基本属性。首先是亮度,也称灰度,它是大 ...

  • 图像像素操作中X/Y & rows/cols

    图像操作中经常需要遍历像素点以及再图像指定位置进行操作的需求,那就涉及到像素点的下标索引,横纵坐标以及宽高经常出错...

  • Opencv-Python学习笔记九——图像阈值threshol

    图像阈值操作 图像阈值操作目的是从灰度图像中分离出目标区域和背景区域 图像的二值化就是将图像上的像素点的灰度值设置...

网友评论

      本文标题:007 图像像素的逻辑操作

      本文链接:https://www.haomeiwen.com/subject/ebxcrctx.html