# 创建窗口和滑动条
cv2.namedWindow('img', cv2.WINDOW_AUTOSIZE)
cv2.setMouseCallback('img', callback, "userdata")
cv2.createTrackbar('H', 'img', 0, 360, callback)
cv2.createTrackbar('S', 'img', 0, 100, callback)
cv2.createTrackbar('V', 'img', 0, 100, callback)
# 读取图片
path = filedialog.askopenfilename()
img=Image.open(path)
img = np.asarray(img).astype(np.float32) / 255.0
# 转化RGB图片为HSV图片
hsvimg = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
hsv_img = np.copy(hsvimg)
while True:
H = cv2.getTrackbarPos('H', 'img')
S = cv2.getTrackbarPos('S', 'img')
V = cv2.getTrackbarPos('V', 'img')
# 调节H,S,V
hsv_img[:, :, 0] = H + hsvimg[:, :, 0] # 0-360
# hsv_img[:, :, 0][hsv_img[:, :, 1] > 360] = 360
hsv_img[:, :, 1] = (1.0 + S / 100) * hsvimg[:, :, 1] # 0-1
hsv_img[:, :, 1][hsv_img[:, :, 1] > 1] = 1
hsv_img[:, :, 2] = (1.0 + V / 100) * hsvimg[:, :, 2] # 0-1
hsv_img[:, :, 2][hsv_img[:, :, 2] > 1] = 1
# 显示图片
new_img = cv2.cvtColor(hsv_img, cv2.COLOR_HSV2BGR)
cv2.imshow("img", new_img)
new = new_img * 255
# cv2.resizeWindow('img',(640,480))
key = cv2.waitKey(1)
if key & 0xFF == ord('q'):
break
elif key & 0xFF == ord('s'):
save_path = filedialog.asksaveasfilename()
cv2.imwrite(save_path, new)
cv2.destroyAllWindows()
如下小程序为使用
python
+
opencv
将表格
图片
,按照表格进行分割,并识别分割后的子
图片
中的文字,希望对需要的小伙伴有一些些帮助。具体的实现见如下代码。
# -*- coding: utf-8 -*-
Created on Tue May 28 19:23:19 2019
将
图片
按照表格框线交叉点分割成子
图片
(传入
图片
路径)
@author: hx
import cv2
import numpy as np
import pytesseract
image = cv2.imread('C:/Users/Administrator/Desktop/7.jpg', 1)
fImg = img.astype(np.float32)
fImg = fImg / 255.0
# HLS空间,三个通道分别是: Hue色相、lightness明度、saturation
饱和度
# 通道0是色相、通道
python
opencv
把一张
图片
嵌入(叠加)到另一张
图片
上
1、背景:
最近做了个烟火生成系统的界面设计,需要将烟雾
图片
嵌入到任意一张
图片
中,因此需要
python
opencv
把一张
图片
嵌入(叠加)到另一张
图片
上的知识。(图中红框最终生成
图片
没有的,只是界面有这个功能)
resized1[global_y0:height+global_y0, global_x0:weight+global_x0] = resized0
resized0是小图
resized1是大图,其他参数是左上点和右下点
3、效果图
工程中部分代码
这个是截取我pyqt5中部分代码,具体实现,可以借鉴一下
# 按指定图像大小调整尺寸
def resize_image(image, height = 640, width = 480):
top, bottom, left, right = (0,0,0,0)
# 获取
图片
尺寸
h, w, _ = image.shape
# 对于长宽不等的
图片
,找到最长的一边
longest_edge = max(h,w)
# 计算短边需要增加多少像素宽度才能与长边等长(相当于pad
Photoshop 的色相/
饱和度
调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。每个通道可设置: 色相(hue),
饱和度
(satuation), 明度(Lightness)三个调整值。
另包含 多个颜色空间转换函数
import matplotlib.pyplot as plt
#读取
图片
代码
img = cv2.imread('test.jpg',cv2.IMREAD_GRAYSCALE)
#IMREAD_COLOR = 1
#IMREAD_UNCHANGED = -1
#展示
图片
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
#使用matplotlib分析
图片
#plt.imshow
饱和度
调整算法说明(完整
python
代码在文末):
本算法主要是利用HSL颜色空间进行
饱和度
S的上下限控制,对RGB空间进行补丁式调整。调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R、G、B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。
算法过程如下:
(参考CSDN博客:http...
# 色温调整
hsv_image[:, :, 1] = np.clip(hsv_image[:, :, 1] * 0.7, 0, 255)
hsv_image[:, :, 2] = np.clip(hsv_image[:, :, 2] * 0.7, 0, 255)
在上面的代码中,我们将
色调
减小了10度,并将
饱和度
和
亮度
分别乘以0.7来降低色温。
3. 将
图片
转换回 BGR 色彩空间并保存。
```
python
output_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
cv2.imwrite("output.jpg", output_image)
完整代码如下:
```
python
import cv2
import numpy as np
image = cv2.imread("image.jpg")
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
#
色调
调整
hsv_image[:, :, 0] = (hsv_image[:, :, 0] - 10) % 180
# 色温调整
hsv_image[:, :, 1] = np.clip(hsv_image[:, :, 1] * 0.7, 0, 255)
hsv_image[:, :, 2] = np.clip(hsv_image[:, :, 2] * 0.7, 0, 255)
output_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR)
cv2.imwrite("output.jpg", output_image)