OpenCV-Python est un environnement facile à développer pour développer des algorithmes utilisant OpenCV. Voici une note qui vous donnera un indice lors du portage de l'algorithme qui y est développé en C ++.
Pour OpenCV-Python: Utilisation du type numpy.array → Remplacement avec le type cv :: Mat méthode spécifique au type numpy.array Remplacement par la méthode de type cv :: Mat.
Ce type de réécriture est facile. Même si vous n'avez pas assez d'expérience pour créer des algorithmes de traitement d'image, vous pouvez réécrire le code OpenCV-Python en OpenCV C ++ si vous avez de l'expérience avec C ++.
numpy.array | cv::Mat | point important |
---|---|---|
a = np.ones((h,w), dtype=np.uint8) | cv::Mat a=cv::Mat::ones(cv::Size(w, h), cv::CV_8U); | |
shape | size | la forme est[h, w, channel]Commande, ou[h, w] |
img.shape | cv::Size(img.rows, img.cols) | |
img = cv2.imread("lena.png "); imgRGB=img[:, :, ::-1] | cv::Mat img = cv::imread("lena.png "); | cv2.imread()Est dans l'ordre de BGR |
import pylab as plt; plt.imshow(imgRGB) | cv::imshow("title", img); | matplotlib imshow()Est l'imshow de Matlab()Proche de |
a[:, :] = 0 | a.setTo(0); | Pour les images couleur un[:, :, :] = 0 。setTo()L'argument est une constante |
a[b>127] = 255 | a.setTo(255, b > 127); | |
a = b+0 | b.copyTo(a); | Dans numpy juste un=Si b, alors a est un alias pour b, et la substance est la même. |
a[c==d] = b[c==d] | b.copyTo(a, c==d); | |
a = np.array(b, dtype=np.float32)/255.0 | b.convertTo(a, CV_32F, 1.0/255); |
Exemple de code OpenCV-Python
python
# -*- coding: utf-8 -*-
import cv2
import numpy as np
img = cv2.imread("lena.png ", 0)
b = np.zeros(img.shape[:2], dtype=np.uint8)
b[img > 128] = 255
cv2.imwrite("junk.png ", b)
Exemple de code source C ++ réécrit
python
#include <opencv2/opencv.hpp>
int main(int argc, char* argv[]) {
cv::Mat img= cv::imread("lena.png ", 0);
cv::Mat b = cv::Mat::zeros(cv::Size(img.rows, img.cols), CV_8U);
b.setTo(255, img>127);
cv::imwrite("junk_cpp.png ", b);
}
Image du résultat de l'exécution
Fonctions utiles dans numpy numpy.rot90(m, k=1, axes=(0, 1) (https://docs.scipy.org/doc/numpy-1.12.0/reference/generated/numpy.rot90.html)
Recommended Posts