对OpenCV mat进行水平和垂直方向的投影
2014-03-23 21:39
429 查看
#include <opencv2/core/core.hpp> #include <iostream> using namespace cv; using namespace std; void HorizonProjection(const Mat& src, Mat& dst) { // accept only char type matrices CV_Assert(src.depth() != sizeof(uchar)); dst.create(src.rows, 1, CV_32F); int i, j; const uchar* p; float* p_dst; for(i = 0; i < src.rows; i++){ p = src.ptr<uchar>(i); p_dst = dst.ptr<float>(i); p_dst[0] = 0; for(j = 0; j < src.cols; j++){ p_dst[0] += p[j]; } } } void VerticalProjection(const Mat& src, Mat& dst) { // accept only char type matrices CV_Assert(src.depth() != sizeof(uchar)); dst.create(1, src.cols, CV_32F); int i, j; const uchar* p; float* p_dst = dst.ptr<float>(0); for(j = 0; j < src.cols; j++){ p_dst[j] = 0; for(i = 0; i < src.rows; i++){ p = src.ptr<uchar>(i); p_dst[j] += p[j]; } } } int main(){ Mat C = (Mat_<uchar>(3,3) << 0, 1, 0, 2, 5, 2, 0, 3, 0); Mat hp, vp; HorizonProjection(C, hp); VerticalProjection(C, vp); cout << "origin matrix: " << endl; cout << C << endl; cout << "horizon projection matrix: " << endl; cout << hp << endl; cout << "vertical projection matrix: " << endl; cout << vp << endl; }
注意,目前HorizonProjection和VerticalProjection只接受单通道uchar类型的输入矩阵。
结果:
相关文章推荐
- 使用OpenCV2.x计算图像的水平和垂直积分投影
- 【OpenCV】计算图像的水平和垂直积分投影
- 利用OpenCV计算图像的垂直和水平积分投影
- 如何理解图像像素点在水平方向和垂直的投影呢?
- OpenCV2.4.13 文本分割(水平垂直,直方图投影)
- opencv学习---计算图像的水平积分投影和垂直积分投影
- 使用OpenCV2.x计算图像的水平和垂直积分投影
- opencv利用投影法进行水平切割和垂直切割
- 利用OpenCV计算图像的垂直和水平积分投影
- opencv学习---计算图像的水平积分投影和垂直积分投影
- OpenCV Sobel算子水平和垂直方向导数问题
- 利用OpenCV计算图像的垂直和水平积分投影
- 数据库水平分割垂直分割 使用 Hibernate Shards 进行切分
- jquery 水平方向和垂直方向滑动隐藏和显示 渐渐 隐藏和显示
- 编写一个程序,打印输入中单词长度的水平和垂直方向直方图
- 弹性盒布局-----指定水平方向与垂直方向上的对齐方式
- Android RecyclerView(瀑布流)水平/垂直方向分割线
- PYQT5水平布局后垂直方向控件间距的调整方法
- opencv2中使用Mat对图像像素进行操作
- HTML中盒子模型上下左右(水平和垂直方向)都居中