一、处理图像
(一)图片读取
# -*- coding: UTF8 -*-
import cv2
import os
# 读入图片,默认为BGR顺序,读出的变量img类型为uint8, size为(height,width,3)
img = cv2.imread(os.path.join('c:\\', 'test' + '.jpg'))
#读入灰度图片,参数为0,默认为1,读入彩色图片
grayImg = cv2.imread(os.path.join('c:\\', 'test' + '.jpg'), 0)
#显示图片,“图片”为图像窗口名称,img为图像变量,后面要加一句waitKey()
cv2.imshow("图片".encode("gbk").decode(errors="ignore"), img)
cv2.waitKey()
cv2.destroyAllWindows()
按键与ASCII码的对应表:
ESC键 VK_ESCAPE (27)
回车键: VK_RETURN (13)
TAB键: VK_TAB (9)
Caps Lock键: VK_CAPITAL (20)
Shift键: VK_SHIFT (10)Ctrl键:VKCONTROL(17)Alt键:VKMENU(18)空格键:VKSPACE(10)Ctrl键:VKCONTROL(17)Alt键:VKMENU(18)空格键:VKSPACE(20/32)
退格键: VK_BACK (8)
左徽标键: VK_LWIN (91)
右徽标键: VK_LWIN (92)
鼠标右键快捷键:VK_APPS (93)
Insert键: VK_INSERT (45)
Home键: VK_HOME (36)
Page Up: VK_PRIOR (33)
PageDown: VK_NEXT (34)
End键: VK_END (35)
Delete键: VK_DELETE (46)
方向键(←): VK_LEFT (37)
方向键(↑): VK_UP (38)
方向键(→): VK_RIGHT (39)
方向键(↓): VK_DOWN (40)
F1键: VK_F1 (112)
F2键: VK_F2 (113)
F3键: VK_F3 (114)
F4键: VK_F4 (115)
F5键: VK_F5 (116)
F6键: VK_F6 (117)
F7键: VK_F7 (118)
F8键: VK_F8 (119)
F9键: VK_F9 (120)
F10键: VK_F10 (121)
F11键: VK_F11 (122)
F12键: VK_F12 (123)
Num Lock键: VK_NUMLOCK (144)
小键盘0: VK_NUMPAD0 (96)
小键盘1: VK_NUMPAD0 (97)
小键盘2: VK_NUMPAD0 (98)
小键盘3: VK_NUMPAD0 (99)
小键盘4: VK_NUMPAD0 (100)
小键盘5: VK_NUMPAD0 (101)
小键盘6: VK_NUMPAD0 (102)
小键盘7: VK_NUMPAD0 (103)
小键盘8: VK_NUMPAD0 (104)
小键盘9: VK_NUMPAD0 (105)
小键盘.: VK_DECIMAL (110)
小键盘*: VK_MULTIPLY (106)
小键盘+: VK_MULTIPLY (107)
小键盘-: VK_SUBTRACT (109)
小键盘/: VK_DIVIDE (111)
Pause Break键: VK_PAUSE (19)
Scroll Lock键: VK_SCROLL (145)
0x1 鼠标左键
0x2 鼠标右键
0x3 CANCEL 键
0x4 鼠标中键
0x8 BACKSPACE 键
0x9 TAB 键
0xC CLEAR 键
0xD ENTER 键
0x10 SHIFT 键
0x11 CTRL 键
0x12 MENU 键
0x13 PAUSE 键
0x14 CAPS LOCK 键
0x1B ESC 键
0x20 SPACEBAR 键
0x21 PAGE UP 键
0x22 PAGE DOWN 键
0x23 END 键
0x24 HOME 键
0x25 LEFT ARROW 键
0x26 UP ARROW 键
0x27 RIGHT ARROW 键
0x28 DOWN ARROW 键
0x29 SELECT 键
0x2A PRINT SCREEN 键
0x2B EXECUTE 键
0x2C SNAPSHOT 键
0x2D INSERT 键
0x2E DELETE 键
0x2F HELP 键
0x90 NUM LOCK 键
A 至 Z 键与 A – Z 字母的 ASCII 码相同:
值 描述
65 A 键
66 B 键
67 C 键
68 D 键
69 E 键
70 F 键
71 G 键
72 H 键
73 I 键
74 J 键
75 K 键
76 L 键
77 M 键
78 N 键
79 O 键
80 P 键
81 Q 键
82 R 键
83 S 键
84 T 键
85 U 键
86 V 键
87 W 键
88 X 键
89 Y 键
90 Z 键
0 至 9 键与数字 0 – 9 的 ASCII 码相同:
值 描述
48 0 键
49 1 键
50 2 键
51 3 键
52 4 键
53 5 键
54 6 键
55 7 键
56 8 键
57 9 键
下列常数代表数字键盘上的键:
值 描述
0x60 0 键
0x61 1 键
0x62 2 键
0x63 3 键
0x64 4 键
0x65 5 键
0x66 6 键
0x67 7 键
0x68 8 键
0x69 9 键
0x6A MULTIPLICATION SIGN (*) 键
0x6B PLUS SIGN (+) 键
0x6C ENTER 键
0x6D MINUS SIGN (–) 键
0x6E DECIMAL POINT (.) 键
0x6F DIVISION SIGN (/) 键
下列常数代表功能键:
值 描述
0x70 F1 键
0x71 F2 键
0x72 F3 键
0x73 F4 键
0x74 F5 键
0x75 F6 键
0x76 F7 键
0x77 F8 键
0x78 F9 键
0x79 F10 键
0x7A F11 键
0x7B F12 键
0x7C F13 键
0x7D F14 键
0x7E F15 键
0x7F F16 键
waitKey顾名思义等待键盘输入,单位为毫秒,即等待指定的毫秒数看是否有键盘输入,若在等待时间内按下任意键则返回按键的ASCII码,程序继续运行。若没有按下任何键,超时后返回-1。参数为0表示无限等待。
(二)保存图片
#保存图片,第一个参数为保存路径和保存名称,这里为images/test1.jpg,第二个参数为需要保存的图像变量
cv2.imwrite(os.path.join('c:\\', 'test1' + '.jpg'), img)
#输出 (height,width,3),如果是灰度图像为 (height,width)
"""访问图像所有的像素"""
print(img.shape)
#输出 height
#获取图像的高度,图像的高度为shape的第一个值(维度)
print(img.shape[0])
#输出 width
#获取图像的宽读,图像的宽度为shape的第二个值(维度)
print(img.shape[1])
#输出通道数,彩色图像为3,灰度图像报错,shape没有第三个参数,只有(height,width)
#获取图像通道数目,图像的通道数目为shape的第三个值(维度)
#加载进来的图像都有三个通道,三个通道是图像的RG
print(img.shape[2])
#循环获取每个像素点,并且修改,然后存储修改后的像素点
# for row in range(height):
# for col in range(width):
# for c in range(channels):
# pv=image[row,col,c]
# image[row,col,c]=255-pv
#输出的是一个呈现负片效果的图片
# cv.imshow("pixels_demo",image)
#输出 height×width×3 ,灰度图像输出 height×width
print(img.size)
#输出 uint8
print(img.dtype)
(三)缩放图像
# -*- coding: UTF8 -*-
import cv2
import os
# 读入图片,默认为BGR顺序,读出的变量img类型为uint8, size为(height,width,3)
img = cv2.imread(os.path.join('c:\\', 'test' + '.jpg'))
#第一种形式直接输入缩放后图像的大小,注意形式是(width,height)
img_resized = cv2.resize(img, (int(img.shape[1]/2),int(img.shape[0]/2)), interpolation = cv2.INTER_CUBIC)
#显示图片,“图片”为图像窗口名称,img为图像变量,后面要加一句waitKey()
cv2.imshow("图片".encode("gbk").decode(errors="ignore"), img_resized)
cv2.waitKey()
cv2.destroyAllWindows()
第二种形式在输入缩放系数,在缩放系数之前加上None,fx代表列方向(宽度)的缩放系数,fy代表行方向(高度)的缩放系数
# -*- coding: UTF8 -*-
import cv2
import os
# 读入图片,默认为BGR顺序,读出的变量img类型为uint8, size为(height,width,3)
img = cv2.imread(os.path.join('c:\\', 'test' + '.jpg'))
#第二种形式在输入缩放系数,在缩放系数之前加上None,fx代表列方向(宽度)的缩放系数,fy代表行方向(高度)的缩放系数
#最后的系数interpolation可以选择:
#CV_INTER_NN - 最近邻插值,
#CV_INTER_LINEAR - 双线性插值 (缺省使用)
#CV_INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 CV_INTER_NN 方法..
#CV_INTER_CUBIC - 立方插值.
img_resized = cv2.resize(img, None, fx = 1.0, fy = 0.5, interpolation = cv2.INTER_CUBIC)
#显示图片,“图片”为图像窗口名称,img为图像变量,后面要加一句waitKey()
cv2.imshow("图片".encode("gbk").decode(errors="ignore"), img_resized)
cv2.waitKey()
cv2.destroyAllWindows()