1、环境搭建
python安装好后(我的版本是2.7),需要在安装Numpy和opencv(注意对应的版本号)
1)numpy的安装:
在http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy网址下载Numpy的whl包,使用pip install D:\TDDownload\Python\numpy-1.10.4+mkl-cp27-cp27m-win32.whl命令安装
2)opencv的安装:
下载解压opencv后,将解压目录opencv文件夹中,build->python->2.7->x86下的文件cv2.pyd 复制到python2.7\Lib\site-packages 中
2、PyOpencv和CV2
网上看到的很多代码都用到一些highgui等等,这些都是PyOpencv的,在cv2中找不到。cv2扩展库是针对OpenCV 2版本以后创建的,cv2对图像的操作对象是Numpy数组,而原来的是cvmat和iplimage。
打开一个图像的方法不同:
array=cv2.imread("E://1.jpg")
iplimage = cv.LoadImage("E://1.jpg")
cv2里创建图片的方法使用numpy的函数:image= np.zeros(img.shape, np.uint8)
两个库的操作对象不同,虽然可以转换但还是不要混着用,cv2中找不到的一些方法,可以cv2里的cv2.cv里找到。
3、二值化:
图像的二值化就是将图像上的像素点的灰度值设置为0或255,这样将使整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
#创建一个单通道的图片
new1= cv.CreateImage(cv.GetSize(image1), image1.depth, 1)
#将图片转换为一个灰度图
cv.CvtColor(image1,new1,cv.CV_BGR2GRAY)
#将灰度图进行二值化
cv.Threshold(new1, new1,91, 255, cv.CV_THRESH_BINARY_INV)
函数说明
Threshold(src, dst, threshold,max_value,threshold_type);
函数说明:
第一个参数表示输入图像,必须为单通道灰度图。
第二个参数表示输出的边缘图像,为单通道黑白图。
第三个参数表示阈值,超过这个阈值即判定为黑或白
第四个参数表示最大值。
第五个参数表示运算方法。
用cv2的实现:
image1 =cv2.imread(img1)
#灰度化
grey = cv2.cvtColor(image1,cv2.COLOR_BGR2GRAY)
#二值化(参数顺序和cv有些不同)
cv2.threshold(grey1,threshold, 255, cv2.THRESH_BINARY,grey1)
4、腐蚀和膨胀
腐蚀和膨胀是图像的形态学处理中最基本的操作,之后遇见的开操作和闭操作都是腐蚀和膨胀操作的结合运算。
#结构元素
element_shape = cv.CV_SHAPE_RECT
pos=2
element =cv.CreateStructuringElementEx(pos*2+1, pos*2+1, pos, pos,element_shape)
结构元素参数依次是结构元素类型(OpenCV中提供了宏定义MORPH_RECT、MORPH_CROSS和MORPH_ELLIPSE表示)、结构元素大小
#腐蚀
cv.Erode(new2,new2,element,2)
#膨胀
cv.Dilate(new2,new2,element,2)
Cv2的实现:
#腐蚀
cv2.erode(blur1,kernel)
#膨胀
cv2.dilate(blur1,kernel)
开运算是对图像先腐蚀后膨胀
闭运算是对图像先膨胀后腐蚀
开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不变。
闭运算能够填平小湖(小孔),弥合小裂缝,而总的位置和形状不变。
#开运算
cv.MorphologyEx(new1, new1, None, element, cv.CV_MOP_OPEN)
#闭运算
cv.MorphologyEx(new2, new2, None, element, cv.CV_MOP_CLOSE)
cv2的实现
open1 = cv2.morphologyEx(blur1, cv2.MORPH_OPEN, kernel)
result1 = cv2.morphologyEx(open1, cv2.MORPH_CLOSE, kernel)