资源简介
可直接适用于K210等OV2640摄像头采集后图像的后期处理,为了适配不同比例小屏幕编写。
使用双线性插值法进行图像缩放。
可以直接在图像中指定位置合成方框,解决TFT显示屏上图像和方框分开刷新的闪烁问题。
可以指定位置指定大小裁剪图像。
可以在图像中合成字符串或矩形填充。
适配 输入格式为uint32_t RGB565图像。可自行修改,注释详细。
补充说明:当前bug,输入输出图像宽度必须为2的倍数
代码片段和文件信息
#include “K210_CV.h“
#include
#include
extern uint8_t const ascii0816[];
void Image_cropping_fun(uint32_t *originImageuint16_t originWidth uint32_t *outputImage uint16_t outputWidth uint16_t outputHeigh uint16_t originX uint16_t originY)
{
outputWidth /= 2;
originWidth /= 2;
originX /= 2;/////////
for (uint16_t i = 0; i < outputHeigh; i++) {
for (uint16_t j = 0; j < outputWidth; j++)
{
outputImage[i * outputWidth + j] = originImage[(originY + i) * originWidth + originX + j];
}
}
}
void Image_32RGB_2_8RGB(uint32_t* originImage uint16_t originWidth uint16_t originHeigh uint8_t* R uint8_t* G uint8_t* B)
{
//拆解出三个通道数据
for (int originn = 0; originn < originWidth*originHeigh; originn++)
{
for (int rgbn = 0; rgbn < 3; rgbn++)
{
if(originn%2)//奇数取uint32后16位 RGB565
{
if(rgbn == 0) R[originn] = ((originImage[originn / 2] & 0xffff) & 0xF800) >> 11;//R 5
if(rgbn == 1) G[originn] = ((originImage[originn / 2] & 0xffff) & 0x07E0) >> 5;//G 6
if(rgbn == 2) B[originn] = ((originImage[originn / 2] & 0xffff) & 0x001F);//B 5
}else
{
if(rgbn == 0) R[originn] = ((originImage[originn / 2] >> 16) & 0xF800) >> 11;//R 5
if(rgbn == 1) G[originn] = ((originImage[originn / 2] >> 16) & 0x07E0) >> 5;//G 6
if(rgbn == 2) B[originn] = ((originImage[originn / 2] >> 16) & 0x001F);//B 5
}
}
}
}
/*
1.首先根据缩放比例计算出缩放后的宽高和单个像素点的坐标
2.根据此缩放后的坐标反推出原图的虚坐标P
3.在该虚坐标周围取四个真实像素点坐标ABCD
4.将四个真实像素值通过双线性插值法计算出该虚坐标的像素值
5.将虚坐标像素值赋值给缩放后坐标
6.分通道遍历缩放后所有像素点
A(x0y0)-----------B(x1y0)
| SC | SD |
|----p------|小数部分
| SB | SA |
| | |
D(x0y1)-----------C(x1y1)
小数部分
双线性插值公式:
Z1=(f(x1y0)-f(x0y0))/(x1-x0)*u+f(x0y0)
Z2=(f(x1y1)-f(x0y1))/(x1-x0)*u+f(x0y1)
Z=(Z2-Z1)/(y1-y0)*v+Z1
由(x1-x0)=(y1-y0)=1
故Z=v*(u*f(x1y1)+(1-u)*f(x0y1))+(1-v)*(u*f(x1y0)+(1-u)*f(x0y0))
u、v为浮点数,取值范围[01)
注意 必须分单个像素分通道进行计算。
*/
#define StretchFun 1
#if StretchFun == 0 //该函数帧率较低且占用空间过大
void stretchImage (uint32_t* originImage uint16_t originWidth uint16_t originHeigh uint32_t* outputImage uint16_t outputWidth uint16_t outputHeigh)
{
uint64_t xRatio = (originWidth<<8) / outputWidth; //横向比
uint64_t yRatio = (originHeigh<<8) / outputHeigh; //纵向比
uint8_t* originR = NULL; //定义空指针
uint8_t* originG = NULL;
uint8_t* originB = NULL;
originR = malloc(originWidth * originHeigh); //该变量过大,故向堆中申请动态内存空间,否则作为局部变量存储在栈中会导致溢出
originG = malloc(originWidth * originHeigh);
originB = malloc(originWidth * originHeigh);
if (!(originR||originG||originB)) printf(“originRGB malloc error------“);
uint32_t channelsR channelsG channelsB;
Image_32RGB_2_8RGB(originImage originWidth originHeigh originR originG originB);
// 4.对新图像的像素点进行遍历
for (int i = 0; i < outputHeigh;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14080 2020-07-18 18:49 K210_CV.c
文件 2946 2020-07-18 18:17 K210_CV.h
相关资源
- 图像处理与计算机视觉算法及应用-第
- 基于opencv的图像处理
- 数字图像处理第三版中文+课件
- ENVI遥感图像处理方法 第2版带pdf目录
- 数字图像处理 原书第四版 pdf完整版
- 上海交通大学 医学图像处理技术 全
- 图像局部不变形特征与描述 王永明
- 数字图像处理_第三版_冈萨雷斯_书+课
- 数字图像处理 冈萨雷斯 第三版英文
- 《VTK图形图像开发进阶》随书代码
- 山东大学数字图像处理实验1-4
- 数字图像处理疑难解析(英)Petrou机
- 数字图像处理 原书第3版(W.K.Pratt)
- 数字图像处理m文件,代码及图片素材
- 数字图像处理学 阮秋琦 pdf
- 图像处理标准图集合 lena peppers woman
- 学习OpenCV3中文版实力源码
- STM32 OV2640 机器视觉 图像处理 滚球系
- Digital image processing 数字图像处理第三
- 图像处理经典测试图片
- imaris_中文教程.pdf
- 海康威视图像处理Demo
- 数字图像处理学 第3版 [阮秋琦 编]
- 数字图像处理 冈萨雷斯第四版英,第
- OpenCV图像处理视频课程 - 贾志刚 PP
- 图像处理、分析与机器视觉-2015英文版
- halcon 三维机器视觉方法介绍
- 《学习OpenCV(中文版)》-于仕琪
- 特征提取与图像处理第二版.pdf
- Synthetic Aperture Radar Processing
评论
共有 条评论