카테고리

분류 전체보기 (68)
JAVA-기본 (7)
JAVA-AWT (24)
JAVA-클래스의 중요메소드 (23)
JAVA-람다식 (0)
Android Studio (7)
Python (1)
OpenCV (1)
AWS (0)
webrtc (0)
javascript (4)
처리방침 (1)
rss 아이콘 이미지

01. openCV 이미지 출력 및 색상 변경

OpenCV/기본 2023. 1. 15. 15:45 Posted by IT-개발자
반응형

이번 시간에는 openCV에서 가자 기본인 이미지를 출력해보도록 하겠습니다.

openCV를 이용하여 기존 이미지를 출력함과 동시에 아래 이미지를 흑백으로 보여주도록 하겠습니다.

https://pixabay.com/illustrations/dog-sitting-mascot-tamed-brown-5188108/

 

<이미지 및 흑백 보여주기>

import sys
import cv2

img = cv2.imread('dog.png', cv2.IMREAD_COLOR)
gray_img =  cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('dog_gray.png',img)

if img is None:
    print('Image load failed!')
    sys.exit()    #이미지가 없는 경우 프로그램을 종료
cv2.namedWindow('basic_dog', cv2.WINDOW_NORMAL)
cv2.namedWindow('gray_dog', cv2.WINDOW_NORMAL)
cv2.resizeWindow('basic_dog', 500, 500)
cv2.resizeWindow('gray_dog', 500, 500)

cv2.imshow('basic_dog',img) # basic_dog 라는 제목으로 이미지 화면에 보여주기
cv2.imshow('gray_dog',gray_img) # gray_dog 라는 제목으로 이미지 화면에 보여주기
cv2.waitKey(0) #어떤 키가 입력될때까지 대기
cv2.destroyAllWindows() #모든 창 닫기

 

 

<이미지 색상 변경>

import sys
import cv2

img = cv2.imread('dog.png')
gray_dog1 =  cv2.imread('dog.png', cv2.IMREAD_GRAYSCALE)
gray_dog2 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

if img is None:
    print('Image load failed!')
    sys.exit()    #이미지가 없는 경우 프로그램을 종료
cv2.namedWindow('gray_dog1', cv2.WINDOW_NORMAL)
cv2.namedWindow('gray_dog2', cv2.WINDOW_NORMAL)
cv2.resizeWindow('gray_dog1', 500, 500)
cv2.resizeWindow('gray_dog2', 500, 500)

cv2.imshow('gray_dog1',gray_dog1)
cv2.imshow('gray_dog2',gray_dog2)
cv2.waitKey(0) #어떤 키가 입력될때까지 대기
cv2.destroyAllWindows() #모든 창 닫기

여기서 각 함수를 알아보도록 하겠습니다.

 

cv2.IMREAD_COLOR : 별도로 지정하지 않을 경우 사용되는 기본값이며 칼라 이미지로 읽어드림. 이미지의 투명도값은 무시된다.
cv2.IMREAD_GRAYSCALE : 이미지를 Grayscale로 읽는다
cv2.IMREAD_UNCHANGED : 투명도인 Alpha 채널을 포함하여 읽는다.

 

cvtColor 는 색상을 바꾸는 것으로
cv2.COLOR_BGR2GRAY는 색상 이미지를 회색조 이미지로 변환합니다.
 
 
 
 
다음은 실제 카메라를 연결하고 색상을 바꿔 보도록 하겠습니다.
<카메라 연결을 통한 색상 변경>
import numpy as np
import cv2

cap = cv2.VideoCapture(0) #video 연결된 디바이스 중 첫번째를 가지고 온다.

while(True):
    ret, frame = cap.read()     #   비디오 값이 정상적이면 ret은 True/ cap.read을 통해 frame을 연속적으로 읽는다.

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('video', frame)          #   연속적으로 frame을 출력하여 보여준다.
    cv2.imshow('gray', gray)            #   기본 영상을 gray로 변환.

    if cv2.waitKey() == ord('q'):   #   키보드 q가 나오면 종료.
        break

cap.release()   # 종료이므로 video 객체 cap을 없앤다.
cv2.destroyAllWindows() # 종료

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

layout- LinearLayout(안드로이드)

Android Studio/기본1 2023. 1. 8. 17:12 Posted by IT-개발자
반응형

레이아웃 종류는 다음과 같습니다.

ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space

 

그중에서도 LinearLayout을 살펴보도록 하겠습니다.

LinearLayout은 여러 View(Button, imageView 등) 컴포넌트들을 수직적(Vertical), 수평적(Horizontal)으로 컴포넌트를 레이아웃 위에 정렬하여 배치할 수 있습니다.  그래서 수직, 수평적으로 사용하기 때문에 LinearLayout은 직관적이라는 장점이 있습니다.

 

그러면 LinearLayout에 대해 실습을 해보도록 하겠습니다.

1. 새로운 Project를 만들겠습니다.
2. 처음 생성한 프로젝트의 activity_main.xml 화면에서 Component Tree 는 앞의 시간에 확인하였듯이 ConstraintLaytou으로 지정되어 있으나 오른쪽 마우스를 클릭해서 Convert View를 통해 View를 LinearLayout으로 변경하도록 하겠습니다.
3. LinearLayout으로 변경하기 위해 해당 레이아웃을 클릭한 후 Apply를 클릭하도록 하겠습니다.
4. 레이아웃을 바꾸면 기본적으로 Horizontal 인 수평정렬이 기본으로 세팅되어 있습니다.
5. hello world인 TextView 컴포넌트의 오른쪽 속성인 layout_width를 변경하여 현재 warp_content인 내용물에 맞춰진 크기를 match_parent를 변경하여 부모창인 LinearLayout에 맞추도록 하겠습니다.
6. 위와 같이 hello World가 부모창인 LinearLayout에 맞춰진것을 확인할 수 있습니다.
7. TextView 컴포넌트를 드래그해서 추가하도록 하겠습니다.
8. TextView 두개의 컴포넌트가 Horizontal 인 수평정렬이 된것을 확인할 수 있습니다. 혹시, TextView가 겹치는 현상이 이으면 layout_weight 가중치를 모두 1로 설정하면 됩니다.
9. Horizontal 인 수평정렬에 대한 가중치 값

 

그러면 이어서 레이아웃을 Vertical인 수직으로 바꿔서 실습해도록 하겠습니다.

1. LinearLayout에서 오른쪽 마우스를 클릭해서 Conver orientation to vertical(수직)로 바꾸면 되고 만약 vertical인 경우에는 horizontal로 바꾸면 되겠습니다.
2. 레이아웃이 vertical 의 LinearLayout으로 바뀐것을 확인할 수 있으며 자동으로 textView들이 가중치인 weight 1에 의해 세팅된것을 확인할 수 있습니다.
최종적으로 Code형태로 이를 확인하면 LinearLayout의 vertical 형태인 orientation 속성을 확인할 수 있습니다. 그리고 TextView 2개의 가중치 또한 확인 할 수 있습니다. 위의 Code의 모든 xml 값을 복사해서 새로운 Project가 생성되었을때 복사하여 붙여넣으면 그 디자인을 바로 쓸수가 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />

    <TextView
        android:id="@+id/textView8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="TextView" />
</LinearLayout>

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'Android Studio > 기본1' 카테고리의 다른 글

layout-ConstraintLayout(안드로이드)  (0) 2023.01.07
01. 기본 레이아웃 xml 설명  (0) 2022.12.21

layout-ConstraintLayout(안드로이드)

Android Studio/기본1 2023. 1. 7. 13:19 Posted by IT-개발자
반응형

레이아웃 종류는 다음과 같습니다.

ConstraintLayout, LinearLayout(horizontal), LinearLayout(vertical), FrameLayout, TableLayout, TableRow, Space

 

그중에서도 ConstraintLayout을 살펴보도록 하겠습니다.

ConstraintLayout은 여러 View(Button, imageView 등) 컴포넌트들을 객체간에 제약 조건을 설정하여 배치하는 것을 말합니다. ConstraintLayout은 다른 레이아웃들보다 간편하고, 유연한 특징을 가지고 있고 XML을 수정하지 않고 드래그 앤 드롭만을 사용하여 빌드할 수 있는 특징이 있습니다.

 

그러면 실습을 해보도록 하겠습니다.

1. 새로운 Project를 만들겠습니다.
2. 처음 Project를 열고 디자인 activity_main.xml 파일을 열고 디자인 영역을 보면 ConstraintLayout으로 지정되어 있습니다.
3. 중간 영역의 Hello World TextView 영역을 선택하면 위에서 설명드린 가로와 세로에 대한 제약사항이 추가된 것을 확인할  수 있습니다.
4. Button을 추가하기 위해 버튼 컴포넌트를 드래그해서 원하는 위치로 드래그 합니다.
5. 추가한 버튼의 영역을 추가하여 가로, 세로에 대한 제약사항을 추가합니다.
6. 가상머신을 확인할 결과 추가한 버튼 이미지가 원하는 제약사항을 추가한 위치에 있는 것을 확인할 수 있습니다.
7. 그리고 오른쪽 속성 테이블 중 layout 영역에서 기본 영역 사이즈를 지정할 수 있습니다. 만약 가록 layout이 30dp 이라면 양쪽 10dp씩 지정을 하고 나머지 중간 10dp을 기준으로 button 이 지정됩니다.

 

자료가 마음에 드셨다면 자주 찾아주세요^^ 글 올리는데 힘이됩니다.

반응형

'Android Studio > 기본1' 카테고리의 다른 글

layout- LinearLayout(안드로이드)  (1) 2023.01.08
01. 기본 레이아웃 xml 설명  (0) 2022.12.21