xy
=
[
]
def
getInfo
(
event
,
x
,
y
,
flags
,
param
)
:
if
event
==
cv2
.
EVENT_LBUTTONDOWN
:
print
x
,
y
xy
.
append
(
x
)
xy
.
append
(
y
)
if
event
==
cv2
.
EVENT_RBUTTONDOWN
:
print
x
,
y
x1
=
xy
[
0
]
y1
=
xy
[
1
]
x2
,
y2
=
x
-
x1
,
y
-
y1
d
=
min
(
x2
,
y2
)
cropped
=
im
[
y1
:
y1
+
d
,
x1
:
x1
+
d
]
cv2
.
imwrite
(
"click/"
+
name
,
cropped
)
cv2
.
namedWindow
(
'image'
,
0
)
cv2
.
imshow
(
'image'
,
im
)
cv2
.
setMouseCallback
(
"image"
,
getInfo
)
cv2
.
waitKey
(
0
)
cv2
.
destroyAllWindows
(
)
-
左键单击选择左上角,右键单击选择右下角
-
以长宽的最小值截取正方形图像
-
结果保存在click中,记得先新建click文件夹
import cv2, syspath=sys.argv[1]im=cv2.imread(path)name = path.split('/')[-1]xy=[]def getInfo(event, x,y,flags,param): if event == cv2.EVENT_LBUTTONDOWN: print x,y #im[y,x] xy.append(x) xy.append(y) if event == cv2.EVENT_RBUTTONDOWN:
最近在学习图像处理相关内容,也在github上尝试过不少代码,刚开始不明白别人写的代码中
读取图片
的代码到底如何运行的,比如:
im
g =
cv
2.
im
read
(sys.argv[1])
但自己运行(在pycharm中运行的)立马报错列表索引超出范围:
这个问题困扰了我很久,查了很多资料也看不懂(还是自己太菜了),以至于后来只要看到有sys.argv[ ]的代码直接劝退。。。但最近又卡在这个问题上,不跨过这个坎不行了,下定决心好好研究一下,以下是我学习过程中对于sys.argv[ ]的理解。
所以sys.
cv
.
im
read
函数用于读取指定的图像文件,并将读取回来的结果返回。如果图像的路径错误、破损或者格式不支持,则无法正确读取图像,但此时并不会报错,而是返回None。因此,使用命令print(
im
g)查看得到的结果是否为None,进而判断是否读取成功了图像。函数的第一个参数以字符串形式给出需要读取的图像的路径。
一、
cv
.
im
read
函数是什么?
其中,
cv
.
im
read
函数中的flags在不同的..
Open
CV
-
Python
学习(2)—— Open
CV
图像的读取、显示和保存(
cv
.
im
read
、
cv
.
im
show、
cv
.
im
write)
先在此处先声明,后面学习
python
+open
cv
图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2?,我只是复现和稍微修改一下代码,加深自己印象的同时也督促自己好好学习图像处理,在这里再一次感谢这位博主的博文。
配置好所有环境后,开始利用
python
+open
cv
进行图像处理第一步。
在使用
python
open
cv
的时候,我们可能希望
截取
图像下大的某个部分,这个时候我们其实直接
截取
就可以了
首先,open
cv
读取进来的时候,按照逐像素读取也是可能的
假如现在我要把图像横向的从1/3到2/3,纵向全部留取的
截取
图片
,我们可以这样做:
im
age =
im
age[: ,
im
age.shape[1]//3 : (
im
age.shape[1]//3)*2]
要注意的是,...