图像处理基本方法-在BMP图片上画矩形-c语言调用opencv实现

14 篇文章 1 订阅
6 篇文章 0 订阅

图像处理基本方法-在BMP图片上画矩形-c语言调用opencv实现

之前使用过c语言调用opencv实现生成纯色BMP文件的功能。

这次使用c语言调用opencv在bmp图片上画矩形。

主要还是使用opencv的cvRectangle函数实现。

具体函数调用

	cvRectangle(testImage,
		cvPoint(iStartX, iStartY),
		cvPoint(iEndX, iEndY),
		cvScalar(u8B, u8G, u8R),
		1
		);

其中testImage为图像文件。

cvPoint(iStartX, iStartY)为左上角的坐标。

cvPoint(iEndX, iEndY)为右下角的坐标。

cvScalar(u8B, u8G, u8R)颜色信息。

代码实现

/*******************************************************
* file:testOpenCvRectangle.c
* date:2021-06-05
* version:1.0.0.1
* author:jack8126
* description: bmp file, draw a rectangular picture
*******************************************************/
#include <stdio.h>

#include "opencv2/opencv.hpp"

int main(int argc, char * * argv)
{
    char u8PicNameRead[64] = {0}; 
    char u8PicNameOut[64] = {0}; 
	
    int iStartX = 0;
    int iStartY = 0;
    
    int iEndX = 0;
    int iEndY = 0;
    
    int iWidth = 0;
    int iHeigth = 0;
    
    unsigned char u8R = 0;    
    unsigned char u8G = 0; 
    unsigned char u8B = 0; 
	
    if(argc < 10)
    {
        printf("please input like this:\r\n");
        printf("./testRectangle.bin test.bmp test-out.bmp 200 180 390 420 255 255 255 \r\n");
        printf("test.bmp          ---------- input file \r\n");
        printf("test-out.bmp    ----------output file \r\n");
        printf("200        --------------- start x \r\n");
        printf("180      ---------------- start y \r\n");
        printf("390      -----------------end x\r\n");
        printf("420       ---------------- end y \r\n");
        printf("255     ---------------- B \r\n");
        printf("255     ---------------- G \r\n");
        printf("255     ---------------- R \r\n");
        return -1;
    }
	
	sprintf(u8PicNameRead,"%s",argv[1]);
    sprintf(u8PicNameOut,"%s",argv[2]);

    printf("u8PicNameRead=%s\r\n",u8PicNameRead);

   
    iStartX = atoi(argv[3]);
    iStartY = atoi(argv[4]);

    iEndX = atoi(argv[5]);
    iEndY = atoi(argv[6]);

    u8R = atoi(argv[7]);
    u8G = atoi(argv[8]);
    u8B = atoi(argv[9]);

    printf("iStartX  = %d\r\n",iStartX);
    printf("iStartY = %d\r\n",iStartY);

    printf("iEndX  = %d\r\n",iEndX);
    printf("iEndY = %d\r\n",iEndY);
    
    printf("u8R     = %d\r\n",u8R);
    printf("u8G     = %d\r\n",u8G);
    printf("u8B     = %d\r\n",u8B);

	IplImage * testImage = cvLoadImage( ( const char*)u8PicNameRead, 1);

	cvRectangle(testImage,
		cvPoint(iStartX, iStartY),
		cvPoint(iEndX, iEndY),
		cvScalar(u8B, u8G, u8R),
		1
		);

	cvSaveImage(u8PicNameOut, testImage,0);    

	cvReleaseImage(&testImage);

	return 0;
}

makefile文件

#############################################################################
CROSS_COMPILE	          = 
CC                      = $(CROSS_COMPILE)gcc -g
CPP                     = $(CROSS_COMPILE)g++
CXX                     = $(CROSS_COMPILE)g++
AR                      = $(CROSS_COMPILE)ar
AS                      = $(CROSS_COMPILE)as
LD                      = $(CROSS_COMPILE)ld
NM                      = $(CROSS_COMPILE)nm
RM                      = rm
MAKE                    = @make
MKDIR                   = mkdir -p
COPY                    = @copy
CD                      = @cd
ECHO                    = @echo
ZIP                     = @gzip 

PWD_DIR := $(shell pwd)

#OPENCV_BASE_DIR := $(PWD_DIR)/../output/
OPENCV_BASE_DIR := /usr/local/

OPENCV_DIR :=  -I$(OPENCV_BASE_DIR)/include
OPENCV1_DIR :=  -I$(OPENCV_BASE_DIR)/include/opencv
OPENCV2_DIR := -I$(OPENCV_BASE_DIR)/include/opencv2

OPENCV_LIB_DIR := -L$(OPENCV_BASE_DIR)lib/

OPENCV_LIB_DIR2 := -L$(OPENCV_BASE_DIR)lib/

OPENCV_LIBS := $(OPENCV_LIB_DIR)libopencv_highgui.a\
		$(OPENCV_LIB_DIR)libopencv_core.a\
		$(OPENCV_LIB_DIR)libopencv_imgproc.a\
		$(OPENCV_LIB_DIR)libopencv_objdetect.a

INC_FLAGS := $(OPENCV_DIR) $(OPENCV1_DIR) $(OPENCV2_DIR) 

SRC  := $(wildcard *.c) 
OBJ  := $(SRC:%.c=%.o)

#TARGET := $(OBJ:%.o=%)
TARGET := testOpenCvRectangle.bin
.PHONY : clean all

all :    testBmpCv.bin

testBmpCv.bin:
	$(CXX) testOpenCvRectangle.c $(INC_FLAGS) $(OPENCV_LIB_DIR2) -fPIC -lpthread -lz -lopencv_highgui -lopencv_core -lopencv_imgproc -lopencv_objdetect -o $(TARGET)  $(OBJS) $(LIBS)
clean:     
	rm -f $(OBJS) $(TARGET)

编译程序

编译命令如下

make

执行完上述命令之后,会生成testOpenCvRectangle.bin文件,后面执行程序时需要该文件。

在这里插入图片描述

执行程序

使用如下命令执行程序,在bmp图片上完成矩形图形的绘制。

./testOpenCvRectangle.bin image.bmp image-out.bmp 200 180 390 420 0 0 255

执行完上述命令后,生成image-out.bmp文件。

如想修改矩形的大小,修改上述200 180 390 420数字即可。

如想修改矩形的颜色,修改上述0 0 255的色彩信息即可。

在这里插入图片描述

原图

在这里插入图片描述

绘制矩形之后的图片

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值