opencv之为图像添加边界

我们经常会有对图像边缘做扩展的需求.比如

  • 希望卷积后得到的矩阵大小不变
  • 希望改变图像大小,但是不改变宽高比

opencv实现

opencv中使用copyMakeBorder()来完成这一功能
api

  • src是原图像矩阵
  • dst是新图像矩阵
  • top/bottom/left/right是边界扩展的大小(比如5就代表5个像素)
  • borderType
  • value是扩充的像素填什么值

borderType分两种:

  • BORDER_CONSTANT
    边缘填充用固定像素值,比如填充黑边,就用0,白边255
  • BORDER_REPLICATE
    用原始图像相应的边缘的像素去做填充,看起来有一种把图像边缘"拉糊了"的效果

opencv示例

import sys
import cv2 as cv

def test():
    src = cv.imread("/home/sc/disk/keepgoing/opencv_test/lights.jpeg")
    top = int(0.05 * src.shape[0])  # shape[0] = rows
    bottom = top
    left = int(0.04 * src.shape[1])  # shape[1] = cols
    right = left

    value = [0,0,0]
    borderType = cv.BORDER_CONSTANT
    dst1 = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value)

    borderType = cv.BORDER_REPLICATE
    dst2 = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value)

    cv.imshow("blackborder",dst1)
    cv.imshow("BORDER_REPLICATE",dst2)

    if 27 == cv.waitKey():
        cv.destroyAllWindows()

test()

效果如下:

原文地址:https://www.cnblogs.com/sdu20112013/p/11643420.html

时间: 2024-08-29 19:57:49

opencv之为图像添加边界的相关文章

【OpenCV】给图像添加噪声

图像噪声使图像在获取或是传输过程中收到随机信号干扰,妨碍人们对图像理解及分析处理的信号.很多时候将图像噪声看做多维随机过程,因而描述噪声的方法完全可以借用随机过程的描述,也就是使用随机过程的描述,也就是用它的高绿分布函数和概率密度分布函数.图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量,图像在传输过程中产生图像噪声的主要因素是所用的传输信道收到了噪声的污染. 下面简单介绍两种图像噪声,即椒盐噪声和高斯噪声. 1.椒盐噪声 椒盐噪声也称为脉冲噪声,是图像中经常见到的一种噪声,它是一种

基于c++和opencv底层的图像旋转

图像旋转:本质上是对旋转后的图片中的每个像素计算在原图的位置. 在opencv包里有自带的旋转函数,当你知道倾斜角度theta时: 用getRotationMatrix2D可得2X3的旋转变换矩阵 M,在用warpaffine函数可得倾斜后的图像dst. 很方便啊,为什么还要自己实现底层的图像旋转呢?因为有些地方你用这两个函数就会出现问题,比如说: 当原图的size是MXN,且图像是完全填充的(因为如果有留白可能还不能将问题完全反映出来),现在你需要将它90°变换(为了形象说明),可是用前面两个

OpenCV —— 矩阵和图像操作

cvAbs , cvAbsDiff , cvAbsDiffS cvAdd , cvAddS , cvAddWeighted(可添加权重) #include <cv.h> #include <highgui.h> int main(int argc,char** argv) { IplImage *s1,*s2; s1=cvLoadImage("wukong.jpg",CV_LOAD_IMAGE_COLOR); s2=cvLoadImage("test.

opencv缩小两次寻找边界

核心函数:cvPyrDown,cvCanny 程序: #include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> #include "function.h" int FindBorder_Canny(int argc,char** argv) { IplImage* src=cvLoadImage("e:\\pi

OpenCV优化:图像的遍历4种方式

OpenCV优化:图像的遍历4种方式 分类: 算法学习2014-04-13 23:43 1312人阅读 评论(0) 收藏 举报 opencv 目录(?)[+] OpenCV优化:图像的遍历4种方式 我们在实际应用中对图像进行的操作,往往并不是将图像作为一个整体进行操作,而是对图像中的所有点或特殊点进行运算,所以遍历图像就显得很重要,如何高效的遍历图像是一个很值得探讨的问题. 一.遍历图像的4种方式:at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板

opencv在图片上添加文字

/****************************************** func:cvText desc:put text on an image @param img The image pointer which we want to put text on @param text the text pointer @param x the x coordinate @param y the y coordinate @return null ****************

GIS(四)——为js版搜狗地图添加边界+Marker和Brand的最终美化版

在<GIS(三)--优化js版搜狗地图的brand标牌样式>中,分享了一下Brand样式的修改.现在把这几次Marker和Brand的修改统一再美化一下,算作一个终极优化版吧. 这次优化的主要内容是: 为整个操作的区域,添加边界 为Marker更换动态图片 为Brand更换半透明红色图片 只显示一个Brand,每3秒切换一次 1.绘制边界 首先做第一个吧,在搜狗地图上添加边界,是一个很简单的.很基本的,但是又很人性化的一个功能.在官网的实例代码中,覆盖层的第21个示例代码<画多边形区域.

OpenCV 基础知识------图像创建、访问、转换

cvCreateImage函数-- Cxcore数组操作 创建头并分配数据 IplImage* cvCreateImage( CvSize size, int depth, int channels ); size 图像宽.高. depth 图像元素的位深度,可以是下面的其中之一: IPL_DEPTH_8U - 无符号8位整型 IPL_DEPTH_8S - 有符号8位整型 IPL_DEPTH_16U - 无符号16位整型 IPL_DEPTH_16S - 有符号16位整型 IPL_DEPTH_32

OpenCV特征点检测匹配图像-----添加包围盒

最终效果: 其实这个小功能非常有用,甚至加上只有给人感觉好像人脸检测,目标检测直接成了demo了,主要代码如下: // localize the object std::vector<Point2f> obj; std::vector<Point2f> scene; for (size_t i = 0; i < good_matches.size(); ++i) { // get the keypoints from the good matches obj.push_bac