Python_OpenCV进行图像的简单操作

1、使用numpy的item()、itemset()操作图像像素

处理灰度图像:

#coding:utf-8
import cv2
import numpy as np

#读取一张灰度图
gray_image = cv2.imread("cat.jpeg", 0)
cv2.imshow("before", gray_image)
rows = gray_image.shape[0]
cols = gray_image.shape[1]
for i in range(0, rows):
    for j in range(0, cols):
        #调用item()获取像素的值
        gray_value = gray_image.item(i, j)
        #调用itemset()重新获取像素的值
        gray_image.itemset((i, j), (int)(gray_value / 2))
cv2.imshow("after", gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

处理彩色图像: 

#coding:utf-8
import cv2
import numpy as np

#读取一张彩色图
color_image = cv2.imread("cat.jpeg", 1)
cv2.imshow("before", color_image)
rows = color_image.shape[0]
cols = color_image.shape[1]
for i in range(0, rows):
    for j in range(0, cols):
        #使用item()分别获取彩色的三个通道的值
        b = color_image.item(i, j, 0)
        g = color_image.item(i, j, 1)
        r = color_image.item(i, j, 2)
        #使用itemset()分别设置彩色图像的三个通道的值
        color_image.itemset((i, j, 0), int(b / 2))
        color_image.itemset((i, j, 1), int(g / 2))
        color_image.itemset((i, j, 2), int(r / 2))
cv2.imshow("after", color_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2、图像的加法操作

进行图像加法操作有两种方式:numpy加法和opencv加法。

(1)numpy加法

      numpy加法可以认为是取模加法。什么意思呢?

      假设图像是8位的图像,像素的最大值是255。取模运算的意思就是:若相加后的像素值小于255,,则值为和;若相加后的像素值大于255,则值为(和%255)。因此,相加后的像素的值有时候原始图像的像素值。

(2)opencv加法

      opencv加法可以认为是饱和加法。也就是说,如果相加后的像素值小于255,则值为和;若相加后的像素值大于255,则和为255。对于这样的加法来说,相加后的图像的像素值一定会大于原始图像的像素的像素值。

上代码:

#coding:utf-8
import cv2
import numpy as np

img1 = cv2.imread("cat.jpeg", 0)
img2 = cv2.imread("cat.jpeg", 0)
cv2.imshow("source_img", img1)

#使用numpy的加法操作
add_by_numpy = img1 + img2
cv2.imshow("add_by_numpy", add_by_numpy)

#使用opencv的add()进行加法操作
add_by_opencv = cv2.add(img1, img2)
cv2.imshow("add_by_opencv", add_by_opencv)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

3、图像融合

      图像融合就是将2张或者2张以上的图像信息融合到一张图像上。融合后的图像含有更多的信息、能够更方便人来观察或者计算机处理。注意图像融合的时候,原始图像的权重是不同的,也就是说对应的权重系数是不同的。

图像融合公式:图像1*权重1+图像2*权重2+亮度调节参数

上代码:

#coding:utf-8

import cv2
import numpy as np

img1 = cv2.imread("cat_1.jpg", 0)
img2 = cv2.imread("cat_2.jpg", 0)
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)

img = cv2.addWeighted(img1, 0.5, img2, 0.5, 50)
cv2.imshow("img_fusion", img)

cv2.waitKey(0)
cv2.destroyAllWindows()

运行结果:

4、图像转换

      OpenCV提供了200多种类型的转换。常用的就是彩色图转灰度图、BGR转RGB等。这里演示两种简单的转换方法。

#coding:utf-8
import cv2
import sys

img_color = cv2.imread("cat.jpeg", 1)
cv2.imshow("img_color", img_color)

#BGR--->gray
img_gray = cv2.cvtColor(img_color, cv2.COLOR_BGR2GRAY)
cv2.imshow("img_gray", img_gray)

#BGR--->RGB
img_RGB = cv2.cvtColor(img_color, cv2.COLOR_BGR2RGB)
cv2.imshow("img_RGB", img_RGB)

cv2.waitKey(0)
cv2.destroyAllWindows()

print(sys.executable)

5、图像缩放

#coding:utf-8
import cv2

image = cv2.imread("cat.jpeg", cv2.IMREAD_COLOR)
cv2.imshow("image", image)

#通过指定行数和列数进行图像缩放, 注意行和列的顺序是(列数, 行数)
image_resize_1 = cv2.resize(image, (500, 300))
cv2.imshow("image_resize_1", image_resize_1)

#通过指定行和列的缩放倍数进行缩放
image_resize_2 = cv2.resize(image, None, fx = 1.5, fy = 1.5)
cv2.imshow("image_resize_2", image_resize_2)

cv2.waitKey(0)
cv2.destroyAllWindows()

6、图像翻转

#coding:utf-8

'''
图像翻转有三种方式:
以x轴对称轴、以y轴为对称轴、先以x为对称轴翻转再以y为对称轴翻转
'''

import cv2

image = cv2.imread("cat.jpeg", 1)

#x
img_x = cv2.flip(image, 0)
#y
img_y = cv2.flip(image, 1)
#xy
img_xy = cv2.flip(image, -1)

cv2.imshow("source", image)
cv2.imshow("image_x", img_x)
cv2.imshow("image_y", img_y)
cv2.imshow("image_xy", img_xy)

cv2.waitKey(0)
cv2.destroyAllWindows()
发布了47 篇原创文章 · 获赞 23 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/llfjcmx/article/details/86602038