我的第一个OPENCV程序

进公司实习,发现同事用的都是OPENCV,看看手里的MATLAB真有点无地自容。好吧,那就学吧。翻了一下书,感觉OPENCV没有想象中的那么恐怖。记得毕业的时候,我班同学也仅仅花了几天时间久做出来一个基于OPENCV的人脸识别系统。要有信心,有决心!

主要参考了OPENCV的官方网站

http://www.opencv.org.cn/index.php/OpenCV_%E7%BC%96%E7%A8%8B%E7%AE%80%E4%BB%8B%EF%BC%88%E7%9F%A9%E9%98%B5/%E5%9B%BE%E5%83%8F/%E8%A7%86%E9%A2%91%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%AF%BB%E5%86%99%E6%93%8D%E4%BD%9C%EF%BC%89#.EF.BC.882.EF.BC.89____.E8.BD.BD.E5.85.A5.E5.9B.BE.E5.83.8F:

这个程序的功能是从C:\Debug中读取文件1.jpg,并进行反色处理。这里的反色没有调用库函数而是使用循环处理完成的。

#include "iostream.h"
#include "highgui.h"
#include "cv.h"
#include "stdio.h"
int main(int argc, char **argv)
{
//IplImage* img=cvLoadImage(argv[1]);
 int height,width,step,channels;
 uchar *data;
 int i,j,k;

IplImage* img=0;
img=cvLoadImage("C:\\Debug\\1.jpg", CV_LOAD_IMAGE_COLOR);

  if(!img) printf("Could not load image file: %s\n","C:\Debug\2.jpg");


// get the image data
  height    = img->height;
  width     = img->width;
  step      = img->widthStep;
  channels  = img->nChannels;
  data      = (uchar *)img->imageData;
  printf("Processing a %dx%d image with %d channels\n",height,width,channels);
 
  // create a window
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
  cvMoveWindow("mainWin", 100, 100);
 
  // invert the image
  // 相当于 cvNot(img);
  // IplImage *pDstImg = cvCreateImage(cvGetSize(img),img->depth,img->nChannels);
  // cvNot(img, pDstImg);
  for(i=0;i<height;i++) for(j=0;j<width;j++) for(k=0;k<channels;k++)
   data[i*step+j*channels+k]=255-data[i*step+j*channels+k];
 
  // show the image
  cvShowImage("mainWin", img );
 
  // wait for a key
  cvWaitKey(0);
 
  // release the image
  cvReleaseImage(&img );
  return 0;
}


 

以下是一个基于dlib库的Python人脸对齐程序: ``` python # 导入必要的库 import cv2 import dlib import numpy as np # 初始化dlib的面部检测器和68个面部关键点预测器 detector = dlib.get_frontal_face_detector() predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat') # 定义人脸对齐函数 def align_face(img): gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = detector(gray) # 如果没有检测到面部,则返回原始图像 if len(faces) == 0: return img # 获取第一个检测到的面部关键点 shape = predictor(gray, faces[0]) shape = np.array([(p.x, p.y) for p in shape.parts()]) # 计算眼睛中心点 left_eye = shape[36:42].mean(axis=0).astype(np.int) right_eye = shape[42:48].mean(axis=0).astype(np.int) # 计算角度和缩放比例 dx = right_eye[0] - left_eye[0] dy = right_eye[1] - left_eye[1] angle = np.degrees(np.arctan2(dy, dx)) scale = 1.0 # 计算仿射矩阵 center = tuple(left_eye) M = cv2.getRotationMatrix2D(center, angle, scale) # 计算输出图像大小 output_size = img.shape[:2] # 进行仿射变换 aligned_img = cv2.warpAffine(img, M, output_size, flags=cv2.INTER_LINEAR, borderMode=cv2.BORDER_CONSTANT, borderValue=(0, 0, 0)) return aligned_img # 加载测试图像 img = cv2.imread('test.jpg') # 对齐图像 aligned_img = align_face(img) # 显示结果 cv2.imshow('Original', img) cv2.imshow('Aligned', aligned_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 这个程序会对输入的图像进行人脸检测和关键点提取,然后计算眼睛中心点,并根据眼睛中心点的位置和角度进行仿射变换以对齐人脸。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值