MATLAB中如何在图片中手动画框

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中如何在图片中手动画框相关的知识,希望对你有一定的参考价值。

matlab进行图像处理之后,很多时候需要在图像上画出矩形框;如,调用matlab的某个检测函数,得到结果之后,往往需要将检测结果的矩形框画在图像上,直观、方便的进行查看;下面的代码就是这个目的:
function [state,result]=draw_rect(img,startPosition,windowSize,showOrNot)
% 函数调用:[state,result]=draw_rect(img,startPosition,windowSize,showOrNot)
% 函数功能:在图像画个长方形框
% 函数输入:img为原始的大图,可为灰度图,可为彩色图
% startPosition 框的左上角在大图中的坐标(每行代表x,y坐标),startPosition=[10,30],分别表示x,y为10,30
% windowSize 框的大小 windowSize=[112,92] 分别表示宽、高
% showOrNot 是否要显示结果?默认为显示出来?
% 函数输出:state -- 表示程序结果状态?
% result - 结果图像数据

if nargin < 4
showOrNot = 1;
end

rgb = [255 0 0]; % 边框颜色
lineSize = 3; % 边框大小,取1,2,3

windowSize(1,1)=windowSize(1,1);
windowSize(1,2) = windowSize(1,2);
if windowSize(1,2) > size(img,1) ||...
windowSize(1,1) > size(img,2)
state = -1; % 说明窗口太大,图像太小,
disp('the window size is larger then image...');
return;
end

result = img;
if size(img,3) == 3
for k=1:3
for i=1:size(startPosition,1) %矩形框的总数
if(startPosition(i,1)>=0 && startPosition(i,2)>=0)
result(startPosition(i,2),startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k); %画上边框
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1)+windowSize(i,1),k) = rgb(1,k);%画右边框
result(startPosition(i,2)+windowSize(i,2),startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k); %画下边框
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1),k) = rgb(1,k); %画左边框

if lineSize == 2 || lineSize == 3
result(startPosition(i,2)+1,startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k);
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1)+windowSize(i,1)-1,k) = rgb(1,k);
result(startPosition(i,2)+windowSize(i,2)-1,startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k);
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1)-1,k) = rgb(1,k);

if lineSize == 3
result(startPosition(i,2)-1,startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k);
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1)+windowSize(i,1)+1,k) = rgb(1,k);
result(startPosition(i,2)+windowSize(i,2)+1,startPosition(i,1):startPosition(i,1)+windowSize(i,1),k) = rgb(1,k);
result(startPosition(i,2):startPosition(i,2)+windowSize(i,2),startPosition(i,1)+1,k) = rgb(1,k);
end
end
end
end
end
end

state = 1;

if showOrNot == 1
figure;
hold on;
imshow(result);
end
参考技术A 这是可以的,可这样:
figure, imshow('pout.tif');
h = imrect;

这样就在所显示的图像中,出现十字线时,可直接画一个矩形框,并可把框中的图形输出到h中。
参考技术B

insert→line

或 

insert→rectangle

opencv中 如何在视频中画框然后 实现框的旋转?

画一个矩形框 然后能够旋转一定角度
最好有详细代码

参考技术A #include "opencv2/video/tracking.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <ctype.h>
using namespace cv;
using namespace std;

Mat image;
bool selectObject = false;
bool drawflag=false;
Point origin;
Rect selection(0,0,-1,-1);

void onMouse( int event, int x, int y, int, void* )

if( selectObject )

selection.width = std::abs(x - origin.x);
selection.height = std::abs(y - origin.y);
drawflag=true;
//selection &= Rect(0, 0, image.cols, image.rows);


switch( event )

case CV_EVENT_LBUTTONDOWN:
origin = Point(x,y);
selection = Rect(x,y,0,0);
selectObject = true;
break;
case CV_EVENT_LBUTTONUP:
if( selection.width>0 && selection.height>0)

selectObject = false;
break;

default:
break;


int main()

const char* winname="OnMouseDemo";
VideoCapture cap(0);
namedWindow(winname);
Mat image;
setMouseCallback(winname, onMouse, 0 );
while(1)

cap>>image;
if(drawflag)

rectangle(image,Point(selection.x,selection.y),Point(selection.x+selection.width ,selection.y+selection.height ),Scalar(255,0,0));
image(selection)=image(selection)+Scalar(0,0,250);

imshow(winname,image);

char c = (char)waitKey(10);
if( c == 27 ) break;
if(c=='c') drawflag=false;


return 0;

以上是关于MATLAB中如何在图片中手动画框的主要内容,如果未能解决你的问题,请参考以下文章

matlab2011b在安装激活过程中出现问题

matlab如何让调整保存图像的大小

如何在matlab中读取一组三维dicom图片

MATLAB如何读取图片

MATLAB如何读取图片?

WPF如何制作圆角Datepicker