Python是一种很强大的脚本语言,python在图像处理领域也应用广泛。

要实现Python & OpenCV混合编程,首先要让Python支持OpenCV,所以需要搭建开发环境。
本文基于python 2.7.5 win32搭建开发环境,选择用pip来安装python第三方库。然后将opencv安装目录下的..\python\2.7\x86\cv2.pyd复制到Python安装目录下的..\build\Lib\site-packages。具体搭建过程请参考其他资料。

本文主要对OpenCV代码和Python代码进行对比。
(1) 从代码本身而言,相似度非常高。将.cpp中代码复制到.py中,稍微修改就能使用;
(2) 从运行效率而言,C++运行速度快。对于小Demo而言,没有明显差别;
(3) 从处理效果而言,看不出明显的差别。

本文对输入图像做形态学处理和提取图像边缘,效果图如下:

python opencv 通道 opencv+python_python

本文分别实现上述两种编程语言,具体实现代码如下,且在vs2010,python2.7测试通过。

//.cpp文件
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/photo/photo.hpp"

#include <iostream>
using namespace std;
using namespace cv;

int main(int argc, char* argv[])
{
    Mat srcImg;
    srcImg = imread("D:/openCV/data/naturalImage/data/opencv.jpg", 1);
    Mat image = imread("../data/MICCAI2015.jpg", 1);
    Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));
    Mat imgDilate, imgErode, imgEdge;
    dilate(image, imgDilate, element);
    absdiff(imgDilate, image, imgEdge);
    imshow("膨胀结果图",imgDilate);
    imshow("图像边缘",imgEdge);
    waitKey(0);
    destroyAllWindows();

    return 0;
}
//.py文件
//cp936编码支持中文,utf-8不支持中文
#coding=cp936
import cv2
import numpy

image = cv2.imread("../data/MICCAI2015.jpg",1);
#构造一个3×3的结构元素 
element = cv2.getStructuringElement(cv2.MORPH_RECT,(5, 5));
imgDilate = cv2.dilate(image, element);
imgEdge = cv2.absdiff(imgDilate,image);

cv2.imshow("膨胀结果图",imgDilate);
cv2.imshow("图像边缘",imgEdge);
cv2.waitKey(0);
cv2.destroyAllWindows();