欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語(yǔ)言

當(dāng)前位置:主頁(yè) > 軟件編程 > C語(yǔ)言 >

OpenCV選擇圖像中矩形區(qū)域并保存

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語(yǔ)言|點(diǎn)擊: 次

本文實(shí)例為大家分享了OpenCV選擇圖像中矩形區(qū)域并保存的具體代碼,供大家參考,具體內(nèi)容如下

根據(jù)《Learning OpenCV》中的example4.1改寫:

// An example program in which the
// user can draw boxes on the screen.
//
//#include <cv.h>
//#include <highgui.h>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
// Define our callback which we will install for
// mouse events.
//
void my_mouse_callback(
 int event, int x, int y, int flags, void* param
);
 
CvRect box;
bool drawing_box = false;
bool isRectDrawn = false;
 
// A litte subroutine to draw a box onto an image_copy
void draw_box( IplImage* img, CvRect rect ) {
 cvRectangle (
 img,
 cvPoint(box.x,box.y),
 cvPoint(box.x+box.width,box.y+box.height),
 cvScalar(0x00,0x00,0xff) /* blue */
 );
}
 
void draw_box_green( IplImage* img, CvRect rect ) {
 cvRectangle (
 img,
 cvPoint(box.x,box.y),
 cvPoint(box.x+box.width,box.y+box.height),
 cvScalar(0x00,0xff,0x00) /* green */
 );
}
 
int main( int argc, char* argv[] ) {
 
 box = cvRect(-1,-1,0,0);
 IplImage* image_input = cvLoadImage(argv[1]);
 IplImage* image = cvCloneImage( image_input );
 IplImage* image_copy = cvCloneImage( image );
 IplImage* temp = cvCloneImage( image_copy );
 cvNamedWindow( "Box Example" );
 // Here is the crucial moment that we actually install
 // the callback. Note that we set the value ‘param' to
 // be the image_copy we are working with so that the callback
 // will have the image_copy to edit.
 //
 cvSetMouseCallback(
 "Box Example",
 my_mouse_callback,
 (void*) image_copy
 );
 // The main program loop. Here we copy the working image_copy
 // to the ‘temp' image_copy, and if the user is drawing, then
 // put the currently contemplated box onto that temp image_copy.
 // display the temp image_copy, and wait 15ms for a keystroke,
 // then repeat…
 //
 while( 1 ) {
 //cvCopyImage( image_copy, temp );
 cvCopy( image_copy, temp );
 if( drawing_box ) draw_box( temp, box );
 cvShowImage( "Box Example", temp );
 //if( cvWaitKey( 15 )==27 ) break;
 int key = cvWaitKey( 15 );
 if(key == 27) break;
 if(isRectDrawn){
 if(key == 's' || key == 'S'){
 // draw green box
 draw_box_green( image_copy, box );
 cvCopy( image_copy, image );
 
 // save roi image
 static int index = 0;
 char save_image_name[128];
 sprintf(save_image_name, "rect_%d.jpg", index++);
 cvSetImageROI(image_input, box);
 cvSaveImage(save_image_name, image_input);
 cvResetImageROI(image_input);
 
 isRectDrawn = false;
 }
 
 if(key == 'q' || key == 'Q'){
 cvCopy( image, image_copy );
 isRectDrawn = false;
 }
 }
 }
 // Be tidy
 //
 cvReleaseImage( &image_copy );
 cvReleaseImage( &temp );
 cvDestroyWindow( "Box Example" );
}
 
// This is our mouse callback. If the user
// presses the left button, we start a box.
// when the user releases that button, then we
// add the box to the current image_copy. When the
// mouse is dragged (with the button down) we
// resize the box.
//
void my_mouse_callback(
int event, int x, int y, int flags, void* param
) {
 IplImage* image_copy = (IplImage*) param;
 switch( event ) {
 case CV_EVENT_MOUSEMOVE: {
 if( drawing_box ) {
 box.width = x-box.x;
 box.height = y-box.y;
 }
 }
 break;
 case CV_EVENT_LBUTTONDOWN: {
 drawing_box = true;
 box = cvRect(x, y, 0, 0);
 }
 break;
 case CV_EVENT_LBUTTONUP: {
 drawing_box = false;
 isRectDrawn = true;
 if(box.width<0) {
 box.x+=box.width;
 box.width *=-1;
 }
 if(box.height<0) {
 box.y+=box.height;
 box.height*=-1;
 }
 draw_box(image_copy, box);
 }
 break;
 }
}

使用方法:

載入圖像后,用鼠標(biāo)在圖像上點(diǎn)擊確定矩形起始點(diǎn),拖動(dòng)鼠標(biāo)畫矩形,抬起鼠標(biāo)鍵時(shí)會(huì)畫出一個(gè)紅色矩形區(qū)域。按下s或S鍵,紅色矩形變成綠色,并保存這個(gè)ROI區(qū)域。如果按下q或Q鍵,將會(huì)取消這次選擇,紅色矩形框消失??梢赃B續(xù)選取多個(gè)區(qū)域。按ESC鍵退出程序。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。

上一篇:C++11/14 線程調(diào)用類對(duì)象和線程傳參的方法

欄    目:C語(yǔ)言

下一篇:C語(yǔ)言實(shí)現(xiàn)翻譯功能

本文標(biāo)題:OpenCV選擇圖像中矩形區(qū)域并保存

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/478.html

網(wǎng)頁(yè)制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語(yǔ)言數(shù)據(jù)庫(kù)服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有