彩色图像由R、G、B三通道组成,我们可以分别对每个通道进行操作。主要有通道分离、通道合并、通道交换等操作。
- 通道分离:
cv.split(img)
- 通道合并:
cv.merge(mv)
- 通道交换:
cv.mixChannels(src, dst, fromTo)
代码实现:
File Name: color_operation.py
Program IDE: PyCharm
Create File By Author: Hong
import cv2 as cv
import numpy as np
def channel_operation(image_path: str):
img = cv.imread(image_path, cv.IMREAD_COLOR)
cv.namedWindow('input', cv.WINDOW_AUTOSIZE)
cv.imshow('input', img)
mv = cv.split(img)
print('mv[0]', mv[0])
print('mv[1]', mv[1])
print('mv[2]', mv[2])
mv[0][:, :] = 255
result = cv.merge(mv)
dst = np.zeros(img.shape, dtype=np.uint8)
cv.mixChannels([img], [dst], fromTo=[2, 0, 1, 1, 0, 2])
out = cv.cvtColor(img, cv.COLOR_BGR2RGB)
cv.imshow('bbb', img[:, :, 0])
cv.imshow('ggg', img[:, :, 1])
cv.imshow('rrr', img[:, :, 2])
cv.imshow('result', result)
cv.imshow('dst', dst)
cv.imshow('out', out)
cv.waitKey(0)
cv.destroyAllWindows()
if __name__ == '__main__':
path = 'images/daiyutong.png'
channel_operation(path)
结果展示:
获取更多计算机视觉知识,请关注微信公众号 “AI与计算机视觉”。
给图像添加颜色在使用OpenCV操作图像时,有时候需要给图像添加不同的颜色,以达到不同的风格效果。这里介绍的主要是opencv中的cv.applyColorMap()函数。给图像应用颜色函数cv.applyColorMap(src, colormap, dst=None)src:表示传入的原图;colormap:颜色图类型(17种)。可以单独使用,也可以以一个列表的形式批量使用。以下图举例实现:直接上代码:# -*-coding:utf-8-*-"""File Name: color
简单明了,直接使用【科研】python-opencv批处理文件夹图像-灰度/深度图像彩色化
目标:将文件中所有灰度/深度图像彩色化,增强图像效果。
流程:在python中利用opencv的colormap函数完成转化。
from PIL import Image
# 输入图片名称如下,
filename = '1.tif'#将所需要改变颜色的图片和代码放入相同文件夹,文件格式可以是jpg、tif、...
# 读入图片,转化为 RGB 色值
获取并修改图像中的像素点
我们可以通过行和列的坐标值获取该像素点的像素值。对于BGR图像,它返回一个蓝,绿,红值的数组。对于灰度图像,仅返回相应的强度值。使用相同的方法对像素值进行修改。
import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg')
# 获取某个像素点的值
px = img[100,100]
# 仅获取蓝色通道的强度值
blue = img[100,100,0]
# 修改某个位置的像素值
img[100,100] = [2
import cv2
import numpy as np
img = np.ones((3,3),dtype=np.uint8)#random.random()方法后面不能加数据类型
#img = np.random.random((3,3)) #生成随机数都是小数无法转化颜色,无法调用cv2.cvtColor函数
img[0,0]=100
img[0,1]=150
img[0,2]=255
cv2.imshow('img',img)
cv2.waitK
(base) D:\downloads>pip install opencv-python
Collecting opencv-python
Downloading opencv_python-4.5.3.56-cp37-cp37m-win_amd64.whl (34.9 MB)
|███████████████.
当使用OpenCV-Python进行直线检测时,通常会使用Hough直线变换算法。Hough直线变换算法可以检测出图像中所有的直线,不过有时候需要筛选出需要的直线。
以下是使用OpenCV-Python进行直线检测的基本步骤:
1. 读取图像,将其转换为灰度图像。
```python
import cv2
img = cv2.imread('image.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
2. 对图像进行边缘检测,例如使用Canny算子。
```python
edges = cv2.Canny(gray,50,150,apertureSize = 3)
3. 进行Hough直线变换,检测出所有直线。
```python
lines = cv2.HoughLines(edges,1,np.pi/180,200)
4. 可以根据需要筛选出需要的直线,并将其绘制在原图像上。
```python
for line in lines:
rho,theta = line[0]
if theta > np.pi/180*30 and theta < np.pi/180*150:
a = np.cos(theta)
b = np.sin(theta)
x0 = a*rho
y0 = b*rho
x1 = int(x0 + 1000*(-b))
y1 = int(y0 + 1000*(a))
x2 = int(x0 - 1000*(-b))
y2 = int(y0 - 1000*(a))
cv2.line(img,(x1,y1),(x2,y2),(0,0,255),2)
在以上代码中,`lines`是通过Hough直线变换得到的所有直线。对于每一条直线,可以通过其极坐标表示方式中的角度`theta`来判断其是否为需要的直线。例如,可以筛选出与水平方向夹角在30度到150度之间的直线。
对于需要绘制的直线,可以通过其极坐标表示方式计算出其两个端点的坐标,然后使用`cv2.line()`函数在原图像上绘制出来。
以上是使用OpenCV-Python进行直线检测的基本步骤。