28 Eylül 2017 Perşembe

OpenCV Drawing Functions

Giriş
Java'da şu satırı dahil ederiz.
import org.opencv.imgproc.Imgproc;
arrowedLine metodu
LINE_AA antialiasing kullan anlamına gelir. Şöyle yaparız.
Point from(320, 240); //Middle
Point to(639, 240); //Right border
arrowedLine(image, from, to, Vec3b(0, 0, 0), 1, LINE_AA, 0, 0.1);
Antialiasing kullanmamak için şöyle yaparız.
arrowedLine(image, from, to, Vec3b(0, 0, 0), 1, LINE_8, 0, 0.1);
circle metodu
Bir resme daire çizer. 3.parametre yarıçap,4. parametre renk, 5.parametre thickness (bu değer eksi ise dairenin içi doldurulur), 6. parametre lineType, 7. parametre shift içindir. 7. parametreyi anlamadım.
Örnek
Mavi renkli daire çizmek için şöyle yaparız.
Point center = ...;
int radius = ...;
cv::circle (image, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
Örnek
Mavi renkli daire çizmek için şöyle yaparız.
cv::Mat img = ...;

//draw the circle at the center of your image, with a radius of 50
cv::circle(img, cv::Point(img.rows/2, img.cols/2), 50, cv::Scalar(255, 0, 0),
  -1, 8, 0);
Örnek - filled
İçi doldurulan bir daire çizmek için CV_FILLED yani eksi bir değer veririz. Şöyle yaparız.
cv::circle(img, center, circle_radius, cv::Scalar(1.0, 1.0, 0.3), CV_FILLED);
Eğer için gradient doldurulan bir daire istersek şöyle yaparız.
void printGradient(cv::Mat &_input,const cv::Point &_center, const double radius)
{
  cv::circle(_input, _center, radius, cv::Scalar(0, 0, 0), -1);

  for(double i=1; i<radius; i=i++)
  {
    const int color = 255-int(i/radius * 255); //or some another color calculation
    cv::circle(_input,_center,i,cv::Scalar(color, color, color),2);
  }  
}

clipLine metodu
Örnek ver

ellipse metodu
Örnek ver

ellipse2Poly metodu
Örnek ver

fillConvexPoly metodu
Şöyle yaparız.
cv::Mat img = ...;
cv::Point pts[5] = {
    cv::Point(1, 6),
    cv::Point(2, 7),
    cv::Point(3, 8),
    cv::Point(4, 9),
    cv::Point(5, 10)
};
cv::fillConvexPoly (img, pts, 5, cv::Scalar(1) );

fillPoly metodu
Elimizde bir nokta dizisi olsun.
cv::Point corners[1][4];
corners[0][0] = Point( 10, 10 );
corners[0][1] = Point( 20, 20 );
corners[0][2] = Point( 30, 10 );
corners[0][3] = Point( 20, 10 );
const Point* corner_list[1] = { corners[0] };
Beyaz renk ile doldurmak için şöyle yaparız.
int num_points = 4;
int num_polygons = 1;
int line_type = 8;
cv::Mat mask(30,30,CV_8UC3, cv::Scalar(0,0,0));
cv::fillPoly( mask, corner_list, num_points, num_polygons,
 cv::Scalar( 255, 255, 255 ),  line_type);
Bu alanı başka bir yere kopyalamak için şöyle yaparız.
cv::Mat result;
cv::bitwise_and(source_image, mask, result);
getTextSize metodu
Örnek ver

InitFont metodu
Örnek ver

line metodu
Örnek ver

LineIterator metodu
Örnek ver

rectangle metodu - x1 , y1 , x2 , y2 , color
İmzası şöyle
void rectangle(Mat& img, Point pt1, Point pt2, const Scalar& color,
  int thickness=1, int lineType=8, int shift=0);
polylines metodu
Örnek ver

putText metodu
Örnek ver

ISTQB Chapter 6 - Tool Support for Testing

Giriş
International Software Testing Qualifications Board (ISTQB) Chapter 6 - Tool Support for Testing ile ilgili notlarım şöyle

Test Oracle
Testin sonucunun beklenen önceden bilinmesi sanırım. 

Minimal makefile

Örnek
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde oluşuyor.
CPP = g++
CPPFLAGS = ...
sources = $(wildcard ../*.cpp)
objects = $(sources : ../%.cpp = %.o)

%.o : ../%.cpp
  $(CPP) -c $(CPPFLAGS) $<

all : $(objects)
 ar -rcv libmylib.a $(objects)

Örnek
Şöyle. Bu örnekte .o dosyaları kaynak kod ile aynı yerde değil.
BUILDDIR:=build
sources:=$(wildcard *.c)
objects:=$(addprefix $(BUILDDIR)/, $(patsubst %.c, %.o, $(sources)))

$(BUILDDIR)/%.o: %.c
    gcc -c $^ -o $@

all: $(objects)
Örnek
Şöyledir. Kaynak kodlar elle belirtiliyor. Bu örnekte .PHONY tanımlamak aslında gerekli değil, çünkü aynı diznde clean, fclean, re gibi dosyaların olması zaten mümkün değil.
NAME    = main

CC      = gcc -g

RM      = rm -f

SRCS    = functions.c    \
          main.c

OBJS    = $(SRCS:.c=.o)

CFLAGS = -I ./include/
CFLAGS += -W -Wall -Wextra

all: $(NAME)

$(NAME): $(OBJS)
         @$(CC) $(OBJS) -o $(NAME) $(LDFLAGS)
         @printf "\n[$(GREEN)OK$(WHITE)] Binary : $(NAME)\n"
         @echo "-------------------\n"

%.o :    %.c
         @$(CC) $(CFLAGS) -c -o $@ $<
         @printf "[$(GREEN)OK$(WHITE)] $<\n"

clean:
        $(RM) $(OBJS)

fclean: clean
    $(RM) $(NAME)

re: fclean all

.PHONY: all clean fclean re
Pattern Kuralı
Genelde şöyle bir şeydir.
.c dosyası varsa .o dosyasını üretmek için çalıştırılacak kuralı belirtir.
%.o: %.c
.cpp dosyası varsa .o dosyasını üretmek için çalıştırılacak kuralı belirtir.
# To get *any* .o file, compile its .cpp file with the following rule.
%.o: %.cpp
    $(CXX) $(FLAGS) $(CXXFLAGS) -c $<
Bazen şöyle de yazılabiliyor.
.y dosyası varsa .c dosyası üretmek için çalıştırılacak kuralı belirtir.
.y.c:
    ${BISON} -d -o $@ $< 

$@ işareti
Current target anlamına gelir. makefile çalışırken o anki işletin target ismidir. Şöyle yaparız.
CC=g++
CFLAGS=-c -Wall -g -std=c++11
LDFLAGS=
SOURCES=lab5.cpp Card.cpp Deck.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=lab5

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
    $(CC) $(CFLAGS) $< -o $@

clean:
    rm -f *.o $(EXECUTABLE)